PHPでクラスのエイリアスに文字列でアクセスしようとしたらうまくいかなかった。
use as
は駄目だったけどclass_alias
を使うとうまくいった。
難しい...
class Test
{
public static function method()
{
echo 'method';
}
}
use Test as Test2;
Test::method();// method
Test2::method();// method
call_user_func('Test::method');// method
call_user_func('Test2::method');// class 'Test2' not found
$class = 'Test';
$class::method();// method
$class = 'Test2';
$class::method();// Class 'Test2' not found
$class = 'Test2';
class_alias('Test', 'Test2');
$class::method();// method
頂いたコメントを参考に追記
要素への動的なアクセス
完全修飾名 (クラス名に名前空間プレフィックスをつけたもの) を使う必要があります。
というわけでclass_alias
を使わないならばエイリアスではアクセスできないっぽい。
今回はnamespaceがなかったのでたまたま上手くいってしまったが、
本来はTestもTest::class
で完全修飾名を取得してアクセスしないとだめ。
class_alias
を使っていない場合は動的にアクセスしたいなら文字列には完全修飾名を指定するしかない。
$class = Test::class;// クラスの完全修飾名を取得 'Test'
$class::method();// method
$class = Test2::class;// クラスの完全修飾名を取得 'Test'
$class::method();// method