找不到类 - 使用“使用”

时间:2011-08-05 19:57:26

标签: php

在PHP编程缺席4年后,我试图在其中创建一些新项目。

我正在收集一些有用的库。我有"使用"关键词。这是我抛出错误的代码部分。

<?PHP

    use Assetic\Asset\AssetCollection;
    use Assetic\Asset\FileAsset;
    use Assetic\Asset\GlobAsset;

    $js = new AssetCollection(array(
    ...
?>

我收到错误:

Fatal error: Class 'Assetic\Asset\AssetCollection' not found in /home/php/index.php on line 7

我认为php.ini中的include_path可能有问题,但它看起来像是这样:

include_path = ".:/usr/share/php5:/usr/share/php"

我错过了什么吗?

顺便说一句。我使用的是nginx + php-fpm。

1 个答案:

答案 0 :(得分:11)

use关键字实际上不包含任何文件。我担心您要么使用spl_register_autoload()调用注册自动加载功能,要么手动包含文件。

http://www.php.net/manual/en/function.spl-autoload-register.php

通常一个好的默认自动加载器会查找与命名空间相同路径的文件,如下所示:

spl_autoload_register(
    function($className)
    {
        $className = str_replace("_", "\\", $className);
        $className = ltrim($className, '\\');
        $fileName = '';
        $namespace = '';
        if ($lastNsPos = strripos($className, '\\'))
        {
            $namespace = substr($className, 0, $lastNsPos);
            $className = substr($className, $lastNsPos + 1);
            $fileName = str_replace('\\', DIRECTORY_SEPARATOR, $namespace) . DIRECTORY_SEPARATOR;
        }
        $fileName .= str_replace('_', DIRECTORY_SEPARATOR, $className) . '.php';

        require $fileName;
    }
);

更多关于PHP中的自动加载,这是许多(较新的)项目遵循的结构:http://groups.google.com/group/php-standards/web/psr-0-final-proposal