如何使用带有预定义参数/参数的PHP闭包
我试图实现的是:如何使用带有预定义参数/参数的PHP闭包,php,closures,Php,Closures,我试图实现的是: $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行中写入ecodeonline.com/php,并在第3行中定义,这应该 五岁 我不想重新定义我已经定义的参数
$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行中写入ecodeonline.com/php,并在第3行中定义,这应该
五岁
我不想重新定义我已经定义的参数
我也不想要的是隐藏$x。我不想改变它的可见性
有什么办法吗?请阅读,
在函数a()
中无法自动显示,除非您将参数传递到函数a()
请阅读,$x
在函数a()
中不能自动可见,除非将参数传递到函数a()
请阅读,$x
在函数a()
中不能自动可见,除非将参数传递到函数a()
请阅读,$x
在函数a()
中不能自动可见,除非将参数传递到函数a()
阅读文档:您可以使用
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
This is x: 5
In c: This is x: 5
In c: This is x: 10
请注意,尽管以后更改了$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);
阅读文档:您可以使用
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
This is x: 5
In c: This is x: 5
In c: This is x: 10
请注意,尽管以后更改了$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);
阅读文档:您可以使用
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
This is x: 5
In c: This is x: 5
In c: This is x: 10
请注意,尽管以后更改了$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);
阅读文档:您可以使用
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
This is x: 5
In c: This is x: 5
In c: This is x: 10
请注意,尽管以后更改了$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);
这当然会起作用,但是你通过整个应用程序对
$value
进行微缩,使其发挥作用。微缩?如果需要将参数传递给函数$b()
,则必须在调用$b()
的位置传递给$b()
,而不仅仅是在定义它的位置。您正在从函数a()
中调用$b()
,因此参数必须存在于a()
的范围内。这当然会起作用,但您通过整个应用程序对$value
进行微缩,以使其发挥作用。微缩?如果需要将参数传递给函数$b()
,则必须在调用$b()
的位置传递给$b()
,而不仅仅是在定义它的位置。您正在从函数a()
中调用$b()
,因此参数必须存在于a()
的范围内。这当然会起作用,但您通过整个应用程序对$value
进行微缩,以使其发挥作用。微缩?如果需要将参数传递给函数$b()
,则必须在调用$b()
的位置传递给$b()
,而不仅仅是在定义它的位置。您正在从函数a()
中调用$b()
,因此参数必须存在于a()
的范围内。这当然会起作用,但您通过整个应用程序对$value
进行微缩,以使其发挥作用。微缩?如果需要将参数传递给函数$b()
,则必须在调用$b()
的位置传递给$b()
,而不仅仅是在定义它的位置。您正在从函数a()
中调用$b()
,因此参数必须存在于a()
的范围内