找不到命名空间问题类

时间:2013-05-27 19:34:25

标签: php

在我的根文件夹中,我有一个文件夹,其中包含我在不同项目之间使用的公共文件。 /文件 我有一个文件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

任何帮助将不胜感激

2 个答案:

答案 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自动加载