基本上我想做这样的事情:
$arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
$avg = array_sum($arr) / count($arr);
$callback = function($val){ return $val < $avg };
return array_filter($arr, $callback);
Run Code Online (Sandbox Code Playgroud)
这有可能吗?计算匿名函数之外的变量并在里面使用它?
这是我的匿名函数:
<td><?=call_user_func(function($x) { if ($x == 1) { echo $produto->retornaMedida($dadosProdutos[$t]->medida_id); } else if ($x == 2) { echo "N/A"; } }, $dadosProdutos[$t]->produto_id)?></td>
Run Code Online (Sandbox Code Playgroud)
如果我不在条件范围内使用“超出范围”的内容,它会很好地工作,如下所示:
<td><?=call_user_func(function($x) { if ($x == 1) { echo "Whatever"; } else if ($x == 2) { echo "N/A"; } }, $dadosProdutos[$t]->produto_id)?></td>
Run Code Online (Sandbox Code Playgroud)
但是,$dadosProdutos例如,当我使用 时,我得到:
[24-Dec-2015 03:47:58 America/Sao_Paulo] PHP Notice: Undefined variable: dadosProdutos in G:\Insanity\Web\xampp\htdocs\sisconbr-old\site\modulos\pedido\minhas-cotacoes.php on line 269
Run Code Online (Sandbox Code Playgroud)
当在匿名函数之外使用时, $dadosProdutos 不是“未定义”:
<td><?=$produto->retornaMedida($dadosProdutos[$t]->medida_id)?></td>
Run Code Online (Sandbox Code Playgroud)
有趣的是,当我将外部变量作为参数传递给匿名函数时,我没有任何问题。我认为这就是他们在 C++ 的 lambda 上“捕获超出范围的变量”的意思。