我们发现了一个非常有趣的错误。
我无法在线找到相关信息。
<?php
class Inner
{
public $text = 'Hello, world';
function test()
{
Outer::wtf();
}
}
class Outer
{
public function wtf()
{
print $this->text;
}
}
$i = new Inner;
$i->test();
PHP 5.4
bag.php returns "Hello, world".
但是,php 5.6
bag.php returns error:
"Non-static method Outer::wtf() should not be called statically..."
为什么?
答案 0 :(得分:3)
它与PHP修复incompatible context problem
有关以前在PHP 5.6中已弃用,对具有不兼容上下文的非静态方法进行的静态调用现在将导致被调用方法具有未定义的$ this变量并发出弃用警告。
您可以在运行代码段across different versions
时看到此信息在5.6之前,你会得到E_STRICT
严格标准:非静态方法Outer :: wtf()不应该静态调用,假设$ 7来自第7行/ in / CvZlA中的不兼容上下文
在5.6中你得到
不推荐使用:非静态方法Outer :: wtf()不应该静态调用,假设$ 7来自第7行/ in / CvZlA中的不兼容上下文
最后是7.0或更高版本
不推荐使用:非静态方法Outer :: wtf()不应在第7行的/ in / CvZlA中静态调用
致命错误:未捕获错误:当不在/ in / CvZlA中的对象上下文中时使用$ this:14