1

フォルダー「クラス」に独自のライブラリがあります。Zend ライブラリをスタンドアロンとして使用しようとしています。(クラスを私のアプリに統合する)。

たとえば、以下のように。Zend クラスはすべて Zend というフォルダーの下に置かれます

クラス/db.class.php

クラス/Zend/translate.php ....

以前にクラスをロードするために autoload 関数を使用しています。

if (!function_exists ("__autoload")){
function __autoload($class_name) 
{

    if(file_exists(ABSPATH.'/classes/'.$class_name.'.class.php')){
        require_once ABSPATH.'/classes/'.$class_name.'.class.php';
    }   

}
}

アプリが自分のクラスを必要とするかどうかを関数で確認します。必要な場合は、「クラス」フォルダーからロードします。そうでない場合は、Zend フォルダーからロードします。

私が電話するたびに

require_once ABSPATH.'/classes/Zend/Loader/Autoloader.php'; 
$loader = Zend_Loader_Autoloader::getInstance(); 

「自分の」クラスがロードされていないと言い続けています。これは Zend の自動ロードの問題だと思います。zend フォルダーに db.class.php が必要であることが確認されます。

Zend と自分のライブラリを分離するために行ったときに、これを行うにはどうすればよいですか。

4

1 に答える 1

2

マジック__autoload機能は、複数のオートローダーをサポートしていません。上記のようにカスタム オートローダーを指定してから Zend オートローダーを登録すると、以前にインストールされたオートローダーが Zend オートローダーによって上書きされます。

Zend コンポーネントは spl_autoload_register() を使用するため、このメソッドも使用できます (複数のオートローダーがサポートされています。基本的には、(ユーザー定義の) オートローダーの別のスタックを処理する単一のオートローダーをインストールします)。

http://php.net/manual/function.spl-autoload-register.php

// Example (requires PHP >= 5.3 because of the anonymous function)
spl_autoload_register(function($className) {
    $fileName = ABSPATH .'/classes/'. $className .'.class.php';
    if (is_readable($fileName)) {
        require_once($fileName);
    }
});
于 2012-07-11T19:16:12.670 に答える