如何在lambda函数中调用PHP lambda函数?[duplicate]

rdrgkggo  于 2023-03-07  发布在  PHP
关注(0)|答案(1)|浏览(143)
    • 此问题在此处已有答案**:

Reference: What is variable scope, which variables are accessible from where and what are "undefined variable" errors?(3个答案)
昨天关门了。
这不会产生错误:

$c = function() {
    return 'xx';
};

echo $c();

对于下面的代码,我得到了一个错误,为什么?
警告:未定义的变量$a

$a = function($v) {
    return $v;
};

$b = function($v) {
    return $a($v);
};

echo $b('something');
pgpifvop

pgpifvop1#

错误“警告:未定义的变量$a”是因为变量$a是在赋给$a的匿名函数内部定义的,而它不在赋给$b的匿名函数的作用域中。
换句话说,变量$a没有在全局作用域中定义,所以当赋值给$b的函数试图访问它时,PHP找不到它,并生成一个“Undefined variable”警告。
要修复此错误,需要将$a作为参数传递给赋值给$B的函数,或者使用use关键字将$a变量导入赋值给$b的函数:
选项1:将$a作为参数传递给$B

$a = function($v) {
    return $v;
};

$b = function($v, $a) {
    return $a($v);
};

echo $b('something', $a);

选项2:使用use关键字将$a导入$B

$a = function($v) {
    return $v;
};

$b = function($v) use ($a) {
    return $a($v);
};

echo $b('something');

相关问题