访问父母'在PHP匿名函数(和可能的错误)

时间:2014-05-23 10:25:49

标签: php debugging scope closures anonymous-function

有没有人知道如何从类中定义的匿名函数内部访问父类的函数?这实际上是可能的吗?我不会假设,我必须以某种方式使用“use”关键字将父类引用到匿名函数中。

但是,如果我在运行Windows的版本为5.4.12的本地apache服务器上运行以下代码,则可以正常输出b和a。

如果我在带有Suhosin-Patch(cli)的php版本5.3.10-1ubuntu3.11的linux上运行的apache服务器上运行它,我收到错误Fatal error: Cannot access parent:: when no class scope is active on line 17

echo("PHP version: ".phpversion()."<br /><br />");

class A {

    public function fn() {
        echo("in A");
    }   

}

class B extends A {

    public function fn() {
        echo("in B");

        $anonFn = function() {
            parent::fn(); // this causes the error (sometimes)
        };
        $anonFn();
    }

}


$b = new B();
$b->fn();

如果您将上述代码粘贴到http://writecodeonline.com/php/,则仍会出现错误。

所以我的问题是,

  • 这项工作与否,我是否需要提交php错误报告?
  • 如果它应该总是抛出它正在抛出的错误,我如何在匿名函数中实际获得对'parent'的引用?

谢谢!

1 个答案:

答案 0 :(得分:3)

PHP 5.4包含闭包中的类范围,而PHP 5.3则没有。