PHP:在类属性中使用变量类 - 为什么调用静态方法会返回解析错误?

9 浏览
0 Comments

PHP:在类属性中使用变量类 - 为什么调用静态方法会返回解析错误?

自从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(无错误)
    }
}
class C
{
    protected $myVariableA;
    public function __construct()
    {
        $this->myVariableA = A::class;
    }
    public function doSomething()
    {
        return $this->myVariableA::foo(); //解析错误
    }
}
$b = new B;
$b->doSomething();
$c = new C;
$c->doSomething();

请注意,我在这里不是试图解决问题,但我想要确切地了解为什么会发生这种情况(如果可能的话,包括实现细节)。

0
0 Comments

问题的原因是在调用静态方法时使用了双冒号(::)而不是箭头(->)。

解决方法是将调用静态方法的双冒号(::)改为箭头(->)。

以下是整理后的

根据这篇文章,错误信息与双冒号(::)有关。

在你的 doSomething() 方法中,尝试使用 myVariableA->foo();

这个问题并不是关于 T_PAAMAYIM_NEKUDOTAYIM 是什么意思。我知道它代表双冒号(::),并且也被映射为T_DOUBLE_COLON(我会编辑问题以澄清,谢谢)。

希望对您有帮助!

0