如何实现函数间变量传递?PHP中preg_replace_callback报$s未定义错误求助
解决PHP闭包中
Undefined variable: $s的问题 这个问题我太熟悉了——这是PHP闭包(匿名函数)的作用域特性导致的典型坑!
问题根源
你写的匿名函数是一个独立的作用域,默认情况下它不会自动继承父级函数(也就是xs())的变量。你尝试用global $s没用,是因为$s是xs()的局部参数,不属于全局变量,global关键字只能帮你访问全局作用域的变量,自然无效。
解决方案
要让闭包能访问父级作用域的$s,你需要用use关键字显式把变量引入闭包的作用域里。修改后的代码如下:
function xs($letter, $xs, $s) { $letter = preg_replace_callback( '/'.$xs.'/', function ($match) use ($s) { static $i; $i++; return $s; }, $letter ); return $letter; }
关键说明
use ($s):这行代码告诉PHP,当前闭包要使用父级作用域(xs()函数内部)的$s变量。- 如果你需要在闭包里修改
$s的值,那就要用引用传递,写成use (&$s),但这里你只是返回$s,所以直接传值就够了。
这样修改后,闭包就能正常访问$s,不会再抛出Undefined variable的错误啦!
内容的提问来源于stack exchange,提问作者Aliga Myway
相关产品推荐
相关产品推荐

