为什么在PHP上的匿名函数中无法访问父/外范围的变量?

时间:2015-12-24 05:59:54

标签: php function anonymous-function

这是我的匿名函数:

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

如果我不在条件范围内使用“超出范围”的东西,它的效果非常好,如下所示:

<td><?=call_user_func(function($x) { if ($x == 1) { echo "Whatever"; } else if ($x == 2) { echo "N/A"; } }, $dadosProdutos[$t]->produto_id)?></td>

但是当我使用$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

$ dadosProdutos在匿名函数中使用时不是“未定义”:

<td><?=$produto->retornaMedida($dadosProdutos[$t]->medida_id)?></td>

有趣的是,当我将外部变量作为参数传递给匿名函数时,我没有任何问题。 I think this is what they mean with "capturing an out-of-scope variable" on C++'s lambdas

1 个答案:

答案 0 :(得分:3)

您可以使用使用来捕获所需的变量。

$world = 'world';

$func = function() use ($world) {
    echo 'hello ' . $world;
};

$func();  
// hello world