未找到命名空间问题类


Namespace issue class not found

在我的根文件夹中,我有一个文件夹,里面有我在不同项目之间使用的常用文件。/文件我有一个文件Redis .php,有Redis类,我想在我的一个项目中使用/var/www/html/project/example.php类Redis在/file/library/storage/Redis/Redis .php

my 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

如有任何帮助,不胜感激

您正在寻找的是一个自动加载器,它可以将您的名称空间映射到实际路径,并在创建它们的实例之前包含类文件。看看常用的PSR-0自动装填机。

<?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

应该包含包含类的文件。你可以手动使用:require_once 'redis.php'或者像第一个答案

那样创建一个rontina自动加载