到目前为止,我已经使用了程序独立的自动加载器函数,并使用spl_autoload_register()注册它们以自动加载我的(通常)命名空间类。最近,我注意到有人提到将自动加载器类与一些着名的PHP框架结合使用。PHP自动装载机类与程序自动装载机功能?
现在几乎所有的代码都是面向对象的,但在这个例子中,我并没有看到在基本函数中使用类“Autoloader”的好处。而在可测试性方面,我感觉在我的测试中使用class_exists()检查相当不错,以验证过程函数能够正确加载文件。
所以我的问题有三个:
- 什么优势或者特点(如果有的话)可能会动摇我重构的东西,并开始使用一个完全成熟的对象自动加载的类文件?
- 我在明显的面向对象特性之外缺少一些明显的优势吗?
- 您可以为程序或类自动加载程序创建一个案例吗?
UPDATE
下面是一个典型的自动加载功能,我可能会运用一些示例代码。它是元编码,所以不要找错别字。我组织我的目录结构,以便镜像命名空间。理论上,假设的explode_namespaces()
函数可以作为静态方法与类中的静态方法一起使用,所以这是一个好处。将这些不同的“效用”函数作为一个类中的方法结合起来可能会更清洁。
function autoload($class_name)
{
$root = APP_LIBS; // a directory path constant set at config time
if ($namespaces = explode_namespaces($class_name)) {
$domain = array_shift($namespaces);
$root .= "/$domain/";
$class_name = array_pop($namespaces);
$directories = array();
foreach ($namespaces as $directory) {
$directories[] = $directory;
}
$root .= implode($directories, '/');
}
$file = "$root/$class_name.php";
if (file_exists($file)) {
include $file;
}
}
我已经删除了您的问题中的“答案”部分,因为它与问题无关。你应该考虑添加你自己的答案,它可能会帮助其他人:) – James