PHP5和严格标准错误

PHP5和严格标准错误,php,Php,为什么我会犯这个错误 严格标准:不应静态调用非静态方法Hello_Misc::fix_protocol(),假设$this来自第834行test.php中不兼容的上下文 第834行: $this->my_url = Hello_Misc::fix_protocol($my, 1); 我正在使用最新版本的PHP(>=5.1.3),但在以前的版本(中,static关键字是关键!您需要将该方法声明为static: class Hello_Misc { static public fun

为什么我会犯这个错误

严格标准:不应静态调用非静态方法Hello_Misc::fix_protocol(),假设$this来自第834行test.php中不兼容的上下文

第834行:

$this->my_url = Hello_Misc::fix_protocol($my, 1);

我正在使用最新版本的PHP(>=5.1.3),但在以前的版本(中,
static
关键字是关键!您需要将该方法声明为static:

class Hello_Misc {

   static public function fix_protocol($p1, $p2) {
      // code
   }

}

但是,如果您这样做(而且您应该这样做),您必须确保在此方法中没有使用对象上下文(即
$this
)。如果您这样做,您将不得不稍微检查一下您的设计。

关键字是
static
关键字!您需要将该方法声明为static:

class Hello_Misc {

   static public function fix_protocol($p1, $p2) {
      // code
   }

}

但是,如果您这样做(而且您应该这样做),您必须确保在此方法中没有使用对象上下文(即
$this
)。如果这样做,您将不得不稍微检查一下您的设计。

ok now works:)。但是为什么它在最旧版本的PHP5中工作呢?您可能只是将
error\u reporting
设置为ignore
E\u STRICT
errors。但我不鼓励您禁用它,因为根据通用编程标准和指南,这些警告旨在使您的代码可以接受。例如,在C++中静态调用非静态方法,例如,将导致编译器失败并吐出错误。OK现在工作:但是为什么它在最旧版本的PHP5中工作呢?您可能只是将
error\u reporting
设置为ignore
E\u STRICT
errors。但我不鼓励您禁用它,因为根据通用编程标准和指南,这些警告旨在使您的代码可以接受。例如,在C++中静态调用非静态方法,例如,会导致编译器失败并吐出错误。