LoginSignup
1
1

More than 3 years have passed since last update.

PHPでクラスのエイリアスに文字列でアクセスしてみる

Last updated at Posted at 2019-07-17

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
1
1
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1