我正在构建一个小框架,我可以在未来的小项目中使用它来反复平凡的事情。
我坚持从控制器内部访问库的最佳方法。我最初实现了一个类似于CodeIgniter的系统,我的主控制器类基本上是一个超级对象,并将所有类加载到类变量中,然后通过扩展控制器并像$this->class->method()
这样做最好(最干净)的方法是什么?
答案 0 :(得分:2)
我不喜欢CodeIgniter这样做的方式。它对我来说似乎永远不对。我赞成将一个自动加载类推入spl_autoload堆栈。然后像正常一样调用类:
$class = new SomeClass();
答案 1 :(得分:2)
PHP使用SPL和spl_autoload(以及相关功能)提供自动加载功能。您可以为库代码注册自定义自动加载器。
对于应用程序处理的共享功能,您是否考虑过Front Controller design pattern?
答案 2 :(得分:2)
要只有每个类的一个实例,您可以创建一个简单的服务容器。
class ServiceContainer
{
protected $services;
public function get($className)
{
if (!array_key_exists($className, $this->services)) {
$this->services[$className] = new $className;
}
return $this->services[$className]
}
}
然后为每个应用程序创建一个ServiceContainer实例。将容器注入所有控制器并使用
public function someAction()
{
$this->container->get('Mailer')->send($email_data);
}
简单的例子,显然需要大量工作才能使用(例如需要自动加载和处理文件路径以便于使用,或者更容易添加服务而不获取它们等)。