4

私はPHPの名前空間について学び、単純な自動ロード機能を作成し始めました。Oがしたことは:

function __autoload($name) {
  echo $name . "<br />";
  require_once $name . ".php";
}

したがって、エイリアスまたはインポートステートメントを使用しない場合、これは機能します。use MainNamespace\Subnamespace私がそれをした場合、私が持っていると仮定するからです:

\GreatApp\Models\User.php
\GreatApp\Models\Project.php
\GreatApp\Util\Util.php
\GreatApp\Util\Test\Test.php

私がやろうとすると:

new GreatApp\Models\User();

$nameオートロードではそうなるGreatApp\Models\Userので動作しGreatApp\Models\User.phpます。しかし、私がするとき:

use GreatApp\Models;
new User();

それは失敗します。なぜなら、今$nameは公正Userであり、User.php見つからないからです。では、オートローディングをどのようにセットアップすればよいですか?

4

1 に答える 1

1

名前空間をインポートしてクラスを参照する方法に関係なく、完全な名前空間パスが常にオートローダーに渡されます。それはうまくいくはずです。

__autoload 関数自体だけがメイン (ルート) 名前空間に属している必要があります

于 2010-07-23T13:34:36.087 に答える