为什么使用自动加载器类而不是自动加载器功能?

时间:2014-03-09 23:33:13

标签: php

PHP有一个内置的自动加载器寄存器,spl_autoloader_register(),您可以在其中编写自己的自动加载器功能,就像我在下面所做的那样(您可以想到的任何即兴创作都会有所帮助):

<?php

require_once(__DIR__ . '/../libraries/global.lib.php');

            function load_classes($class) { // appears to get all the names of the classes that are needed in this script...
              $file_name = __DIR__ . '/classes/' . $class . '.class.php';
              if (file_exists($file_name)) {
                require_once($file_name);
              }
            }

            function load_interfaces($interface) {
              $file_name = __DIR__ . '/classes/' . $interface . '.interface.php';
              if (file_exists($file_name)) {
                require_once($file_name);
              }
            }

            spl_autoload_register('load_interfaces');
            spl_autoload_register('load_classes');

?>

但我开始查看其他代码并发现人们使用自动加载器类而不是内置的PHP自动加载器功能:为什么会这样?

1 个答案:

答案 0 :(得分:3)

来自PHP documentation on autoloading

  

提示 spl_autoload_register()为自动加载类提供了更灵活的替代方法。因此,不鼓励使用__autoload(),将来可能会弃用或删除。

所以答案实际上是你按照推荐的方式做的。您正在查看的代码可能是遗留代码,因为在__autoload()之前spl_autoload_register()可用。

请注意,如果您想尽可能多地使用OO,也可以使用静态类函数进行自动加载:

class MyClass {
    static function myloader($name) {
        require_once($name.'.php');
    }
}
spl_autoload_register('MyClass::myloader');