PHP静态调用方法;即使其未定义为静态
这是如何工作的?不应该这会抛出一个错误,因为我试图静态调用一个非静态方法?基本上,我从来没有实例化一个类型的东西的对象。PHP静态调用方法;即使其未定义为静态
class Something {
public function helloworld() {
echo 'hello world';
}
}
Something::helloworld();
将这个在你的脚本的顶部:
error_reporting(E_ALL | E_STRICT); // E_STRICT is important here
ini_set('display_errors', true);
...看到那么会发生什么:
严格的标准:非静态方法::东西的HelloWorld()不应该 可以在[...]
不可否认,它比一个错误的通知,虽然静态调用。你的脚本将继续愉快地继续运行。
它只会给你一个错误,如果内helloworld()
你会使用$this
。
这是一种由于缺少规格而导致的PHP“WTF”类型,它允许您静态调用一个实际上没有声明的函数static
。
IIRC,它不是一个丢失的规范,它只是向后兼容PHP 4. – hakre
...没有规格。 –
嗯,它不是逐字写出来的,但是如果你阅读[PHP 5 docs](http://www.php.net/manual/en/language.oop5.static.php),那么清楚地写出未指定就像上市。而在PHP 4中,公共函数可以静态调用。所以实际上它被记录下来,甚至在静态章节中。另请参阅:http://php.syntaxerrors.info/index.php?title=Call_to_undefined_function#NOTE:_Static_methods_in_PHP4 - 仅供参考,通常情况下,您不应该再关心PHP 4。 – hakre
没什么特别的,只是'$ this = null'。 –
[PHP:通过ClassName ::方法语法调用实例方法,导致静态调用?]的可能重复(http://stackoverflow.com/questions/4664511/php-call-to-an-instance-method -via-classnamemethod-syntax-results-in-a-static) – Gordon