名前空間を使用している場合、クラスを動的にロードすると、静的にロードする場合と同じように機能しないことに気付きました。したがって、たとえば、名前空間を使用しない場合、次のものは、 というクラスをインスタンス化するアクションと同等ですFooBar
。
$foobar = new FooBar();
と
$classname = "FooBar";
$foobar = new $classname;
ただし、名前空間を使用する場合、次のようなコードがあります。
<?php
namespace Structure\Library;
$foobar = new UserService();
$classname = "UserService";
$barfoo = new $classname;
この場合、UserService
クラスの完全修飾名はStructure\Library\UserService
であり、完全修飾名を使用すると両方のケースで機能しますが、ショートカット名のみを使用すると、静的メソッドでインスタンス化された場合'UserService'
にのみ機能します。両方で動作させる方法はありますか?
PS私はすべてのクラスにオートローダーを使用しています...しかし、オートローダーの前に問題が発生しており、オートローダーに渡されるクラス文字列に影響を与えていると想定しています。