PHP 5.4 VS 5.6 BUG

时间:2016-01-29 13:23:40

标签: php

我们发现了一个非常有趣的错误。

我无法在线找到相关信息。

<?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..."

为什么?

1 个答案:

答案 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