如何创建/使用基于命名空间的PHP自动加载器来加载类,以及常量和函数?

时间:2013-12-20 15:40:21

标签: php function class namespaces constants

我有以下自动加载器:

spl_autoload_register(function($class) {
    $class = ltrim($class, '\\');
    $filename  = '';
    $namespace = '';

    if ($last_ns_pos = strripos($class, '\\')) {
        $namespace = strtolower(substr($class, 0, $last_ns_pos));
        $class = substr($class, $last_ns_pos + 1);
        $filename  = str_replace('\\', DIRECTORY_SEPARATOR, $namespace) . DIRECTORY_SEPARATOR;
    }

    $filename .= str_replace('_', DIRECTORY_SEPARATOR, $class) . '.php';

    require $filename;
});

如果我想加载MyApp\Library\ClassOne,这样可以正常工作,因为该课程位于/MyApp/Library/ClassOne.php。这符合one function of namespaces;但是,我希望能够自动加载常量和函数的文件(分别位于MyApp\ConstantsMyApp\Functions中的MyApp\Constants.phpMyApp\Functions.php)。

1 个答案:

答案 0 :(得分:4)

PHP目前(自PHP 5.5起)不支持自动加载除类之外的任何内容。

自动加载函数和常量的功能目前正在讨论中作为可以添加到下一版本(即PHP 5.6)的功能,但是对此的决定尚未最终确定。

有关详细信息,请参阅https://wiki.php.net/rfc/autofunc