我跑进在PHP5.4一些很奇怪的行为(也存在于5.5)。 我基本上是静态调用非静态方法,我没有得到,我绝对应该得到的一个E_STRICT错误。
<?php
error_reporting(E_ALL);
class A
{
public function iAmNotStatic() {}
}
现在,如果我这样做:
A::iAmNotStatic();
然后,我得到的错误预期Strict standards: Non-static method A::iAmNotStatic() should not be called statically
。
而且,如果我做从对象上下文的号召,我也得到了同样的错误(如预期)
class B
{
public function __construct() {
A::iAmNotStatic();
}
}
$b = new B(); // error here, as expected
但是,如果我这样做(指定为B的母公司):
class B extends A
{
public function __construct() {
A::iAmNotStatic();
}
}
$b = new B(); // no error
那么PHP决定,“没问题,我有一个对象($ b)用相同的父类(A),我们只是让它为上下文iAmNotStatic
”。
所以,这是一个功能或一个错误,可能是什么的这种混乱的(无证?)行为的目的是什么? 谢谢 :)