我想要实现的是:
$x = 5;
$b = function ($x) {
echo 'This should be 5 :' . $x;
};
function a($fn){
echo 'In a ';
$fn();
}
a($b);
当您运行此代码时,我们得到
在一个
这应该是5:5
相反,我们得到的是
警告:缺少{closure}()的参数1,该参数在第10行的writecodeonline.com/php中调用,并在第3行定义。应为5
我不想重新定义我已经定义的参数
我也不希望隐藏$ x。我不想更改其可见性。
有办法吗?
阅读文档:您可以use
为其使用表达式:
$x = 5;
$b = function () use ($x) {
echo 'This is x: ' . $x . "\n";
};
$b();
$c = function ($fn) {
echo 'In c: ';
$fn();
};
$c($b);
$x = 10;
$c($b);
输出:
This is x: 5
In c: This is x: 5
In c: This is x: 5
请注意,尽管$x
以后进行了更改,但分配的值不会更改。如果通过引用传递变量,则可以实现:
$x = 5;
$b = function () use (&$x) { // << Note the difference here
echo 'This is x: ' . $x . "\n";
};
$b();
$c = function ($fn) {
echo 'In c: ';
$fn();
};
$c($b);
$x = 10;
$c($b);
输出:
This is x: 5
In c: This is x: 5
In c: This is x: 10
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句