0

通常,我会看到复杂的自动加载解决方案,这些解决方案需要用户使用一组预定义的路径/目录来补充它们,以便在自动加载类时查看这些路径/目录。或者他们有一个复杂的类似全局的搜索,然后构建一个缓存文件以减少查找时间等。

但是,我注意到,只要您为每个类命名,并且这些命名空间与包含它们的目录结构相匹配,那么您的自动加载器不需要比这更复杂:

spl_autoload_register(function ($class) {
    include $class . '.php';
});

假设您不必使用非命名空间的第 3 方类,是否有理由不根据您的文件夹结构来命名您的类,然后让 spl_autoload_register 为您处理所有事情?

我忽略了这个陷阱吗?

4

1 回答 1

0
<?php

/**
 * Ultra fast class autoloader.
 *
 * @param string $class
 *   Fully qualified class name (automatically passed to this magic function by PHP).
 */
function __autoload($class) {
  static $ds = DIRECTORY_SEPARATOR;
  $class = strtr($class, "\\", DIRECTORY_SEPARATOR);
  require "{$_SERVER["DOCUMENT_ROOT"]}{$ds}src{$ds}{$class}.php";
}

?>

它有什么好处?

  • 我想不出任何更快的实现
  • 这是一个普通函数而不是闭包
  • 在 SPL 加载程序之前调用魔法函数
  • 适用于所有平台 ( DIRECTORY_SEPARATOR)
  • 它创建包含的绝对路径(Linux 路径/文件缓存)
  • 它不连接字符串,而是嵌入字符串部分
  • strtr()是最快的字符串替换功能

缺点

  • 只要您的类适合目录结构:无
  • 如果你想包含来自其他人(例如作曲家)的库或东西,你有问题,你的自动加载器将被覆盖并且这些文件将不会被加载(如果这不是必需的,不用担心)
于 2013-10-16T07:24:42.413 回答