在我的根文件夹中,我有一个文件夹,其中包含我在不同项目之间使用的公共文件。 /文件 我有一个文件redis.php,它有Redis类,我想在/var/www/html/project/example.php中的一个项目中使用 Redis类位于/file/library/storage/redis/redis.php
中我的redis.php有
<?php
namespace file\library\storage\redis;
class Redis{
public function init(){
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
}
}
?>
在我的example.php中,我将该名称空间称为
$redis = new \file\library\storage\redis\Redis();
$redis->init();
但它给了我一个错误
[Mon May 27 12:25:48 2013] [error] [client 127.0.0.1] PHP Fatal error: Class 'file\\library\\storage\\redis\\Redis' not found
任何帮助将不胜感激
答案 0 :(得分:2)
您正在寻找的是自动加载器,它可以将您的命名空间映射到实际路径,并在创建它们的实例之前包含类文件。看看常用的PSR-0 autoloader。
<?php
function autoload($className)
{
$className = ltrim($className, '\\');
$fileName = '';
$namespace = '';
if ($lastNsPos = strrpos($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;
}
spl_autoload_register('autoload');
如果在/var/www/html/project/example.php
中包含此代码,那么当您尝试创建实例时会发生什么
$redis = new \file\library\storage\redis\Redis();
是否会尝试首先包含此文件
/var/www/html/project/file/library/storage/redis/Redis.php
答案 1 :(得分:0)
您应该包含包含该类的文件。您可以使用以下方法手动执行:require_once&#39; redis.php&#39;或者按照第一个答案中的说明创建一个rontina自动加载