范围解析:具有闭包调用的对象

时间:2015-03-07 04:14:24

标签: php scope

今天我收到了以下php错误:

  

致命错误:在不在对象上下文中时使用$this

非常直接。我试图访问不在范围内的对象。

代码示例:

class foo{
function bar(){ 
    array_walk($this->array, 
            function (&$v, $k) {
                if('something'){
                    # code goes here...
                }else{
                    $this->erorr_message = 'Fail'; // breaks in v5.3
                }
            }
        );
     if($this->error_message==''){
             //do something
         }
  }

}

我学到的是,这在5.3中不起作用,但它确实在5.5中有效。您能否向我展示进行此更改的PHP更新或向我解释为什么范围并不总是允许这样做?我想我理解的不是原因。

1 个答案:

答案 0 :(得分:0)

它位于php匿名函数的手册页上:

Changelog

Version     Description
5.4.0   $this can be used in anonymous functions.
5.3.0   Anonymous functions become available.

http://php.net/manual/en/functions.anonymous.php

另外

PHP 5.4 - 'closure $this support'