それで、
名前空間を使用した動的オブジェクトの作成に問題があります。名前空間のコードは次のとおりです。
namespace Foo
{
class Bar
{
}
}
今、私はクラスのオブジェクトを作成しようとしていますBar
:
include('namespace.php');
$sName = 'Bar';
$sClass = '\\Foo\\'.$sName;
$rObj = new $sClass; //correct object
そして、すべてがうまくいっています。しかし、今はエイリアスを使用して次のようなことをしたいと思っています:
include('namespace.php');
use Foo as Baz;
$sName = 'Bar';
$sClass0= '\\Foo\\'.$sName;
$sClass1= '\\Baz\\'.$sName;
$rObj = new $sClass0; //correct object
$rObj = new $sClass1; //Fatal error
そして、そのような方法でオブジェクトをインスタンス化することはできません (フルネームでアクセスしてもうまくいきます)。だから、私の質問は - 何らかの方法でエイリアスを介してクラスにアクセスすることは可能ですか? はいの場合、どのように? 使用時にアクセスしようとしましたが$sClass1='Baz\\'.$sName
、成功しませんでした。get_declared_classes()
また、関数を介して宣言されたクラスをチェックしました。クラスしかないことを示しています\Foo\Bar
(エイリアスへの参照はありません)。
問題があるかどうかはわかりませんが、PHP 5.5 バージョンを使用しています。