【问题标题】:Accessing static method of class object访问类对象的静态方法
【发布时间】:2014-04-04 21:41:04
【问题描述】:

尝试访问类变量的静态方法时,我在类内部遇到了一个非常奇怪的语法错误。

class VendorImport {
    //$factory is an instance of another class with a static method get()
    protected $factory;

    public function getInstance() {
        //method 1 works
        $factory = $this->factory;
        return $factory::get();

        //method 2 throws a syntax error
        return $this->factory::get();
    }
}

方法 2 的正确语法是什么?

【问题讨论】:

  • 你得到什么错误?
  • 模糊猜测:解析器优先级问题,您的错误版本被视为$this->{factory::get()}。您收到的确切错误消息是什么?
  • 如果我尝试一下,我会得到"syntax error, unexpected '::' (T_PAAMAYIM_NEKUDOTAYIM)",这很清楚但没有解释原因。
  • 对不起,实际错误是 FatalErrorException: Parse: syntax error, unexpected '::' (T_PAAMAYIM_NEKUDOTAYIM)

标签: php oop


【解决方案1】:

只需使用常规语法来调用非静态方法 - 它也适用于静态方法:

// instead of `return $this->factory::get();`
return $this->factory->get();

Demo。但是有一个缺点:现在在这里调用静态方法并不明显。但是话又说回来,不能在同一个类中以相同的名称定义两种方法——静态和非静态。

【讨论】:

  • 这确实有效,但我讨厌它并没有表明我正在调用静态方法。问题仍然存在,为什么 $this->factory::get() 会导致语法错误。我正在使用 PHP 5.4。
猜你喜欢
  • 2018-04-07
  • 1970-01-01
  • 2015-12-29
  • 1970-01-01
  • 1970-01-01
  • 2012-10-07
  • 1970-01-01
  • 1970-01-01
  • 2011-09-07
相关资源
最近更新 更多