相关疑难解决方法(0)

回调函数使用在其外部计算的变量

基本上我想做这样的事情:

$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)

这有可能吗?计算匿名函数之外的变量并在里面使用它?

php anonymous-function

44
推荐指数
1
解决办法
2万
查看次数

为什么无法在 PHP 的匿名函数中访问父/外部作用域的变量?

这是我的匿名函数:

<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 上“捕获超出范围的变量”的意思

php function anonymous-function

3
推荐指数
1
解决办法
581
查看次数

标签 统计

anonymous-function ×2

php ×2

function ×1