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

0

基于,错误消息与双分号(::)有关。

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

于 2015-07-13T17:22:07.967 回答