2012-07-08 242 views
1

該代碼有效,但$vars無法在call()函數中定義。 爲什麼$vars無法傳遞給array_walk_recursive()PHP將一個變量傳遞給array_walk_recursive

class lib{ 

    private $library; 

    function __construct($lib="") 
    { 
     $this->library = $lib; 
    } 
    function set($vars) 
    { 
     $decoded_classes = json_decode($this->library,true); 
     array_walk_recursive($decoded_classes,function(&$f) {$f = create_function($vars,$f);}); 
     return $decoded_classes; 
    } 
} 
$json = ' 
{  
    "class1": {  
     "function1":"return \"$a<b>$b</b>!\";" 
    }, 
    "class2": {  
     "function2":"return $b;", 
     "function3":"return $c;" 
    }, 
    "function1":"return \"test\";" 
}'; 
$lib = new lib($json); 
$lib = $lib->set("$a,$b"); 
$lib = $lib["class1"]["function1"]("asdasasd","asdasasd"); 
echo $lib; 

回答

4

首先,看看this example with variable scoping for closures。你需要通過變量與use關鍵字,例如:

array_walk_recursive($decoded_classes,function(&$f) use ($vars) {$f = create_function($vars,$f);}); 

這將是很好的,如果你爲我們定義了$a$b,等等,所以我們實際上可以測試你的代碼。

+0

這個答案對於這裏的OP是有限的幫助,代碼只是進入了一個額外的問題:[PHP,解析錯誤:語法錯誤,意外的T_FUNCTION](http://stackoverflow.com/questions/11425559/php-語法分析錯誤語法錯誤意外叔功能)。在這裏找到它的用戶可能也有興趣瞭解這一點。 – hakre 2013-05-02 12:40:58