在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。
答案 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