0

PHP 5.3でクロージャーからメソッドにアクセスするには? 以下のコードは、PHP 5.4 で問題なく実行できます。

class ClassName
{

  function test(Closure $func)
  {
    $arr = array('name' => 'tim');
    foreach ($arr as $key => $value) {
      $func($key, $value);
    }
  }

  function testClosure()
  {
    $this->test(function($key, $value){
    //Fatal error: Using $this when not in object context
    $this->echoKey($key, $value); // not working on php 5.3
  });
}

function echoKey($key, $v)
{
  echo $key.' '.$v.'<br/>'; 
}

}

$cls = new ClassName();
$cls->testClosure();
4

1 に答える 1

3

「use」を使用してクロージャーにオブジェクトを追加する必要がありますが、「エイリアス」を使用します。これは、$this をクロージャーに注入できないためです。

$object = $this;
$this->test(function($key, $value)use($object){
    $object->echoKey($key, $value); // not working on php 5.3
});
于 2013-08-19T09:22:56.210 に答える