【发布时间】:2016-03-30 14:48:35
【问题描述】:
这是我的匿名函数:
<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.
【问题讨论】:
-
试过查看
use关键字? -
作为参数传递或使用
use子句,这是您可以使用 PHP 闭包控制变量范围的方法。那只是standard PHP variable scope。
标签: php function anonymous-function