没有静态的PHP函数仍然可以像静态一样调用

sea*_*lJS 2 php static-methods

我已经注意到在PHP中我可以创建一个没有静态修饰符的函数,但仍然将其称为静态函数,只是好奇为什么这是允许/实际发生的事情.

class Foo {
   public function bar($i) {
       return $i + 1;
   }
}

Foo::bar(4); // 5
Run Code Online (Sandbox Code Playgroud)

我希望静态修饰符是必需的,如:

class Foo {
   public static function bar($i) {
       return $i + 1;
   }
}

Foo::bar(4); // 5
Run Code Online (Sandbox Code Playgroud)

pil*_*eks 5

这是为了与PHP4兼容,其中描述的行为是它实际工作的方式(没有static关键字).

E_STRICT但是,您应该收到错误,除非您error_reporting设置为不显示E_STRICT.