编程语言
首页 > 编程语言> > PHP的静态成员和实例成员似乎没有什么不同.为什么PHP会这样做(没有警告)?

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

这里有一些东西可以玩:

http://codepad.org/Gbu9T6Zv

标签:php,php-internals
来源: https://codeday.me/bug/20190531/1187747.html