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