eli*_*472 37 php functional-programming function
例如,如果我这样做:
function bar(&$var)
{
$foo = function() use ($var)
{
$var++;
};
$foo();
}
$my_var = 0;
bar($my_var);
Run Code Online (Sandbox Code Playgroud)
会$my_var被修改吗?如果没有,如何在不添加参数的情况下使其工作$foo?
hak*_*kre 58
不,它们不是通过引用传递的 - use下面是类似函数参数的表示法.您可以在debug_zval_dump函数(演示)的帮助下自行验证:
<?php
header('Content-Type: text/plain;');
function bar(&$var)
{
$foo = function() use ($var)
{
debug_zval_dump($var);
$var++;
};
$foo();
};
$my_var = 0;
bar($my_var);
echo $my_var;
Run Code Online (Sandbox Code Playgroud)
输出:
long(0) refcount(3)
0
Run Code Online (Sandbox Code Playgroud)
完全通过所有范围的工作引用的引用计数为1.正如所写的那样,您可以通过将引用定义为pass-by-reference来实现:
$foo = function() use (&$var)
Run Code Online (Sandbox Code Playgroud)
也可以这样创建递归:
$func = NULL;
$func = function () use (&$func) {
$func();
}
Run Code Online (Sandbox Code Playgroud)
Emi*_*röm 18
几乎按照定义,闭包是按价值而不是按参考结算.您可以通过&在参数列表中添加一个来"通过引用使用" :
function() use (&$var)
Run Code Online (Sandbox Code Playgroud)
这可以在匿名函数手册页的示例3中看到.