【问题标题】:Use variable by reference in arrow function在箭头函数中通过引用使用变量
【发布时间】:2020-03-23 18:35:44
【问题描述】:

PHP 7.4 引入了Arrow functions。它还引入了隐式的按值范围绑定,从而消除了对 use 关键字的需求。

现在,如果我们想通过常规匿名函数的引用来使用闭包范围之外的变量,我们可以这样做:

$num = 10;
call_user_func(function() use (&$num) {
$num += 5;
});
echo $num; // Output: 15

但是使用箭头函数似乎是不可能的

$num = 10;
call_user_func(fn() => $num += 5);

echo $num; // Output: 10

那么如何通过引用使用$num变量呢?

【问题讨论】:

  • 我认为你必须将它作为参数传递,否则它在函数范围内不可见。虽然我不确定这将如何在实践中发挥作用,所以它可能是不可能的。
  • 我想这是不可能的。
  • 这能回答你的问题吗? Rewriting an anonymous function in php 7.4

标签: php pass-by-reference arrow-functions php-7.4


【解决方案1】:

阅读有关它的documentation,它说...

按值变量绑定
如前所述,箭头函数使用按值变量绑定。这大致相当于 对箭头内使用的每个变量 $x 执行 use($x) 功能。按值绑定意味着无法修改 来自外部范围的任何值:

$x = 1; 
$fn = fn() => $x++; // Has no effect 
$fn(); 
var_dump($x); // int(1)

所以ATM是不可能的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-07
    • 2015-12-29
    • 1970-01-01
    • 2017-04-26
    相关资源
    最近更新 更多