我想要实现的目标是:
$x = 5;
$b = function ($x) {
echo 'This should be 5 :' . $x;
};
function a($fn){
echo 'In a ';
$fn();
}
a($b);
当你运行这段代码时,我们得到了
在
中这应该是5:5
我们得到的是
警告:缺少{closure}()的参数1,调用 writecodeonline.com/php在第10行并在第3行定义 是5
我不想重新定义我已定义的论点
我不想要的是隐藏$ x。我不想改变其知名度。
有没有办法呢?
答案 0 :(得分:2)
阅读文档:您可以使用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
答案 1 :(得分:1)
了解variable scope,$x
无法在函数a()
内自动显示,除非您将参数传递给函数a()
$x = 5;
$b = function ($x) {
echo 'This should be 5 :' . $x;
};
function a($fn, $value) {
echo 'In a ';
$fn($value);
}
a($b, $x);