0

ルート フォルダーには、異なるプロジェクト間で使用する共通ファイルを含むファイル フォルダーがあります。/files /var/www/html/project/example.php のプロジェクトの 1 つで使用したい Redis クラスを持つファイル redis.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

どんな助けでも大歓迎です

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 autoload を作成します

于 2014-04-02T14:58:56.383 に答える