spl_autoload在命名空间目录结构之后找不到类

时间:2013-06-11 09:20:04

标签: php namespaces autoload

我正在尝试在我的项目中使用类自动加载。这就是我写的:

在main.php上:

namespace myproject;

spl_autoload_extensions(".php");
spl_autoload_register();

subspace\myclass::mystaticmethod();

on subspace / myclass.php:

namespace myproject\subspace;

class myclass {

    static function mystaticmethod() {

        ....

    }

}

我收到此错误:

 PHP Fatal error:  Class 'myproject\\subspace\\myclass' not found

到目前为止,我只是在文档中发现了区分大小写的名称的问题,所以我只切换到小写,但是我得到了同样的错误。为什么呢?

[编辑] 使用PHP 5.3.3

1 个答案:

答案 0 :(得分:1)

我发现了问题:默认包含目录将是完整的namespace/subspace路径。

我也找到了一个很好的解决方案。来自http://www.php.net/manual/en/function.spl-autoload.php#92767

<?php
    // Add your class dir to include path
    set_include_path(get_include_path().PATH_SEPARATOR.'..');

    // Make autoloader look for commonly used "myclass.php" type filenames
    spl_autoload_extensions('.php');

    // Use default autoload implementation
    spl_autoload_register();
?>

默认的自动加载实现是用C语言编写的,总是比PHP快一点。