PHP的静态成员和实例成员似乎没有什么不同.为什么PHP会这样做(没有警告)?
作者:互联网
<?php
class A {
public function instanceFunc() {
echo "instance";
}
public static function staticFunc() {
echo "static";
}
}
A::instanceFunc(); // instance
$a = new A();
$a->staticFunc(); // static
这意味着在PHP中静态方法和实例方法完全没有区别.
Zend甚至没有抱怨它(没有警告).
在Zend Engine中.静态方法和实例方法都保存在zend_class_entry.function_table中.
为什么PHP表现得像这样?这是一个错误或功能?
解决方法:
这是Does static method in PHP have any difference with non-static method?的潜在重复.
如果启用了E_STRICT警告,则会收到错误消息,否则,您可以静默调用非静态方法,就好像它是静态的一样.正如在这里和另一个问题的答案中所提到的,如果不按照预期的那样访问$this或self,那么现实世界的静态/非静态方法就不会有太大作用.
请参阅文档:
http://www.php.net/manual/en/language.oop5.static.php
这里有一些东西可以玩:
标签:php,php-internals 来源: https://codeday.me/bug/20190531/1187747.html