我做了一个尝试在匿名函数中调用匿名函数的实验,但它没有工作并且出现了一些错误:
E_NOTICE : type 8 -- Undefined variable: print -- at line 10
E_ERROR : type 1 -- Function name must be a string -- at line 10
任何人都能告诉我原因吗?
以下是代码:
<?php
$print = function($key, $val){
return 'The key: ' . $key . ', and value: ' . $val . '<br />';
};
$output = function($datas, $done_action){
foreach($datas as $key => $val){
echo $print($key, $val);
}
$done_action();
};
$elem1 = array('Name' => 'Aldi', 'Phone' => '087770958005', 'Address' => 'Bogor');
$output($elem1, function(){
echo '<br />Foreach function was ended!';
});
?>
答案 0 :(得分:2)
您需要提供use关键字才能在闭包内使用外部变量。你的代码应该是:
<?php
$print = function($key, $val){
return 'The key: ' . $key . ', and value: ' . $val . '<br />';
};
$output = function($datas, $done_action) use ($print) {
foreach($datas as $key => $val){
echo $print($key, $val);
}
$done_action();
};
$elem1 = array('Name' => 'Aldi', 'Phone' => '087770958005', 'Address' => 'Bogor');
$output($elem1, function(){
echo '<br />Foreach function was ended!';
});
在我的php-5.3.10上运行没有错误。