如何在PHP匿名函数内部调用另一个匿名函数?报错原因解析
PHP匿名函数调用问题
问题场景
以下代码执行无报错:
$c = function() { return 'xx'; }; echo $c();
而执行下方代码时出现错误:
Warning: Undefined variable $a
$a = function($v) { return $v; }; $b = function($v) { return $a($v); }; echo $b('something');
请问为何会报错?如何在PHP匿名函数内部调用另一个匿名函数?
报错原因
PHP的匿名函数(闭包)默认不会自动继承外部作用域的变量。在定义$b这个匿名函数时,它内部的$a属于自身的局部作用域,找不到外部父作用域中定义的$a变量,因此触发“未定义变量”的警告。
解决方法
方法1:使用use关键字引入外部变量
通过use关键字将外部的$a变量显式引入到匿名函数的作用域中,修改后的代码如下:
$a = function($v) { return $v; }; $b = function($v) use ($a) { return $a($v); }; echo $b('something'); // 正常输出"something"
方法2:使用箭头函数(PHP 7.4+)
PHP 7.4及以上版本支持箭头函数,箭头函数会自动继承父作用域的变量,无需手动使用use,代码更简洁:
$a = function($v) { return $v; }; $b = fn($v) => $a($v); echo $b('something'); // 正常输出"something"
内容的提问来源于stack exchange,提问作者smolo
相关产品推荐
相关产品推荐

