【问题标题】:Why it's not possible to access variables from parent/outer scope in anonymous functions on PHP? [duplicate]为什么在 PHP 的匿名函数中无法从父/外部范围访问变量? [复制]
【发布时间】: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


【解决方案1】:

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

$world = 'world';

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

$func();  
// hello world

【讨论】:

    猜你喜欢
    • 2013-02-09
    • 2020-08-19
    • 2019-11-05
    • 2013-08-16
    • 1970-01-01
    • 2015-09-20
    • 1970-01-01
    • 2012-12-31
    相关资源
    最近更新 更多