使用具有自动加载功能的名称空间

时间:2014-05-14 16:53:51

标签: php namespaces autoload

所以我得到了一小段自动加载类的代码。在我添加名称空间之前,一切都很顺利。我得到的错误是它无法找到Class。但是,当我删除命名空间时,它再次起作用。 (当我直接包含wbp.Foo.php时它也有效。)

autoloader.php

<?php

function autoloadLib($className){
    $filename = "lib/wbp." . $className . ".php";
    if(is_readable($filename)){
        require $filename;
    }
}

spl_autoload_register("autoloadLib");

的index.php

<?php

include "autoloader.php";
use Foobar\Foo;
echo Foo::Bar();

LIB / wbp.Foo.php

<?php

namespace Foobar;

class Foo {
    public static function Bar(){
        return "foobar";
    }
}

2 个答案:

答案 0 :(得分:1)

如果你从命名空间开始,你应该在http://www.php-fig.org/psr/psr-4/简单阅读PSR-4文档 - 还有自动加载器的例子。

PSR-4正在成为标准,所以最好的方法是以这种方式做到这一点

答案 1 :(得分:1)

在自动加载中,$className变量包含命名空间。您需要将类移动到包含命名空间的文件/文件夹结构中,或者从类名中删除命名空间,然后根据类加载。我建议前者只是因为命名空间的整个要点是允许两个不同的类定义具有相同的名称。您无法在磁盘上的同一空间中拥有两个具有相同名称的文件。重命名$className可以像str_replace('\\', '.', $className)一样简单,并将您的课程重命名为wbp.NameSpace.ClassName.php