0

ライブラリフォルダに、自分のWebサイトにちなんで名付けられたフォルダがあります。フォルダパスは次のようになります。

〜\ www \ library \ myWebsite.com

Zendオートローダーを使用してライブラリパス内のすべての名前空間をロードしている場合、次のような名前空間を持つファイルからクラスを自動ロードする際に問題が発生しますか?

\ myWebsite.com \ myClass :: myFunction();

私はこれに関するドキュメントをオンラインで探しましたが、この方法で生理を使用することについての情報を見つけることができません。

4

2 に答える 2

0

私はそれを試しました、そして、複雑さはPHPにあります。\ Zend_Load_Autoloader :: getRegisteredNamespaces()を呼び出すと、名前空間が登録されていることが示されるため、Zendは名前空間を正常に登録していると思います。しかし、完全修飾名前空間から静的メソッドを呼び出すと、phpは次のエラーを出します。

Fatal error: Undefined constant 'myWebsite' in /home/jesse/www/application/controllers/MyController.php on line 15 

PHPは、解析中に名前空間識別子をで終了しているようです。(ピリオド文字)。ウェブサイトにちなんで名付けられたライブラリを持つことは私のデザインにとって重要だったので、これは残念です。

ディレクトリの名前をmyWebsitecomに変更するか、.comを次のような独自のサブディレクトリにします。

myWebsite \ comを作成し、次のように名前空間ツリーに組み込みます。\ MyNamespace \ Com \ MyClass :: myFunction();

于 2011-02-04T16:33:31.030 に答える
0

見つける最も簡単な方法はそれを試すことです。

それが機能しない場合は、いつでもカスタムオートローダーを作成して機能させることができます。私はphp名前空間の経験があまりありませんが、オートローダーは次のようになります(クラス名を指定して正しいファイルパスを決定するには、オートローダーを少しいじる必要があると思います)。

<?php
class My_Loader_Autoloader_MyWebsite implements Zend_Loader_Autoloader_Interface {

    /**
     * (non-PHPdoc)
     * @see Zend_Loader_Autoloader_Interface::autoload()
     */
    public function autoload($class) {

        if (strtolower(substr($class, 0, 9)) == 'mywebsite') {
            $file = realpath(APPLICATION_PATH . '/../library/myWebsite.com/' . $class);
            if ($file) {
                require_once $file;
                return $class;
            }
        }
        return false;
    }
}

次に、これをブートストラップに入れます。

$autoloader = Zend_Loader_Autoloader::getInstance();
$autoloader->pushAutoloader(new My_Loader_Autoloader_MyWebsite());

このクラスがそのmyWebsite.comディレクトリにある必要がある場合は、チートしてそこにrequireをスローすることもできます。

 require_once(APPLICATION_PATH . '/../library/myWebsite.com/Loader/Autoloader/MyWebsite.php');
于 2011-02-04T16:05:32.367 に答える