[英]PHP autoloader class vs. procedural autoloader function?
到目前为止,我已经使用了程序独立的自动加载器函数,并使用spl_autoload_register()注册它们以自动加载我的(通常)命名空间类。 最近,我注意到人们提到将自动加载器类与一些着名的PHP框架结合使用。
我的代码几乎所有代码都是面向对象的,但在这个实例中,我并没有看到在基本函数中使用类“Autoloader”的优势。 在可测试性方面,我觉得在我的测试中使用class_exists()检查来验证过程函数是否正确加载文件。
所以我的问题是三个:
UPDATE
下面是我可能使用的典型自动加载功能的一些示例代码。 它是元代码,所以不要寻找错别字。 我组织我的目录结构,以便它们镜像命名空间。 理论上,假设的explode_namespaces()
函数可以作为静态方法包含在类中的静态autoload()
方法中,因此这是一个好处。 将这些不同的“实用程序”函数组合为单个类中的方法可能更清晰。
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;
}
}
您正在将函数与方法进行比较。 那只是语法糖。
除非您有基于地图的自动加载器或具有内置依赖关系表的自动加载器,否则您不需要任何类级别属性来跟踪事物(否则可能诉诸于静态或全局变量)。 运行时可重配置性在实践中也不是必需的。
您可以创建一个程序自动加载器项目 - 可以使用常量进行配置等。具有构造函数属性对于使用方法实现进行重用并不具有重要意义。 它可能看起来稍微好一些。
如果您已经使用了框架的另一个主要部分,请使用预构建的,否则它并不重要。
此外,使用一个自动加载器,注册多个命名空间/目录将会略微减少内存,但这并不是真正的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.