2012-07-08 191 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