【问题标题】:PHP: call to an instance method via ClassName::method syntax, results in a static call?PHP:通过 ClassName::method 语法调用实例方法,导致静态调用?
【发布时间】:2011-01-12 01:16:55
【问题描述】:

她是我的代码:

class MyClass 
{
   public $prop;
   public function method ()
   {
     echo $this->prop;
   }
}

然后在代码的某个地方,不小心:

MyClass::method();

我希望对上述行有解释错误,因为调用的方法不是静态的。相反,该方法被调用,我收到一个关于 $prop 不存在的异常。所以我知道该方法被称为静态方法,即使它不是。

这样可以吗? (为什么?)

【问题讨论】:

  • 检查你的错误报告,它们可能只是被隐藏了,在你的主文件附近寻找你的error_log。

标签: php static-methods


【解决方案1】:

静态调用非静态方法会生成 E_STRICT 级别的警告。

http://php.net/manual/en/language.oop5.static.php

我想你已经抑制了 E_STRICT 警告。它可以工作(可能出于遗留原因),但不建议这样做。

【讨论】:

    【解决方案2】:

    由于遗留原因,任何类方法都可以静态调用,即使它没有声明为static,因为您以前不能这样声明它们。在这些情况下,$this 将简单地引用任何内容,因为它不是对象上下文变量。

    在 PHP 5 中,您会收到 E_STRICT 警告,用于静态调用非静态方法(就像您刚才所做的那样)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-16
      • 2011-05-15
      • 1970-01-01
      相关资源
      最近更新 更多