0

PHP バージョン 5.3 以降、次のように変数クラスで静的メソッドを呼び出すことができます。

class A 
{
    public static function foo()
    {
        echo 'bar';
    }
}

$myVariableA = A::class;

$myVariableA::foo(); //bar

したがって、以下の例を見て、クラス B が機能し、クラス C が機能しない理由を理解したいと思います。

class A 
{
    public static function foo()
    {
        echo 'bar';
    }
}

class B 
{
    protected $myVariableA;

    public function __construct()
    {
        $this->myVariableA = A::class;
    }

    public function doSomething()
    {
        $myVariableA = $this->myVariableA;
        return $myVariableA::foo(); //bar (no error)
    }
}

class C
{
    protected $myVariableA;

    public function __construct()
    {
        $this->myVariableA = A::class;
    }

    public function doSomething()
    {
        return $this->myVariableA::foo(); //parse error
    }
}

$b = new B;
$b->doSomething();

$c = new C;
$c->doSomething();

ここで問題を解決しようとしているわけではありませんが、なぜそれが起こるのかを正確に理解したいと思っています (可能であれば、実装の詳細と共に)。

4

1 に答える 1