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

Why it's not possible to access variables from parent/outer scope in anonymous functions on 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>

如果我不在条件范围内使用某些东西 "out of scope",它工作得很好,像这样:

<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在匿名函数外使用时不是"undefined":

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

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

$world = 'world';

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

$func();  
// hello world