2013-08-19 75 views
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(); 

回答

3

您需要在封閉添加對象,具有「使用」,但使用的「別名」,因爲這$不能在封閉注射。

$object = $this; 
$this->test(function($key, $value)use($object){ 
    $object->echoKey($key, $value); // not working on php 5.3 
}); 
+0

它的工作原理!但私人方法如何? $ object無法訪問它們 –

+0

顯然,您不能訪問PHP5.3中的閉包中的私有方法,因爲它與「環境」不同。 – mmoreram