此代码有效,但$vars无法在call()函数中定义.为什么$vars不能传递给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;
Run Code Online (Sandbox Code Playgroud) class test
{
public $do;
function __construct($data="")
{
$this->parse($data);
}
private function parse($data)
{
// Decoding the functions
$decoded_data = json_decode($data,true);
array_walk_recursive($decoded_data,function(&$function) {
$first_line = strtok($function, "\n");
preg_match("/\/\*#(.*?)\#*\//",$first_line,$matches);
$function = create_function($matches[1],$function);
});
$this->do = $decoded_data;
}
}
Run Code Online (Sandbox Code Playgroud)
Parse error: syntax error, unexpected T_FUNCTION
错误在于:
array_walk_recursive($decoded_data,function(&$function)