如何使用带有预定义参数/参数的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()
的范围内