0

在我的根文件夹中,我有一个文件夹,其中包含我在不同项目之间使用的常用文件。/files 我有一个文件 redis.php,其中包含我想在 /var/www/html/project/example.php 中的一个项目中使用的 Redis 类 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

任何帮助将不胜感激

4

2 回答 2

2

您正在寻找的是一个自动加载器,它可以将您的命名空间映射到实际路径并在您创建它们的实例之前包含类文件。看看常用的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
于 2013-05-27T19:57:55.880 回答
0

您应该包含包含该类的文件。您可以使用以下方法手动执行此操作: require_once 'redis.php' 或按照第一个答案中的说明创建 rontina 自动加载

于 2014-04-02T14:58:56.383 回答