PHP匿名函数链接
在上面的示例中,我尝试链接/转发多个匿名函数。但是,在下一行我收到一个错误“注意:未定义变量:fn2”PHP匿名函数链接,php,anonymous-function,Php,Anonymous Function,在上面的示例中,我尝试链接/转发多个匿名函数。但是,在下一行我收到一个错误“注意:未定义变量:fn2” 如何实现匿名函数的链接。问题是您没有在闭包的use语句中将$fn2作为参数传递 请尝试以下代码: $fn2($var) 问题是,您的变量$fn2超出了第一个匿名函数的作用域。因此,只需将$fn2的赋值放在$fn1之前,然后像在use()中一样传递变量,例如$fn1=function($var)use($app,$fn2){在使用变量之前需要定义$fn2 编辑:要在中传递变量,请使用() 首先
如何实现匿名函数的链接。问题是您没有在闭包的
use
语句中将$fn2
作为参数传递
请尝试以下代码:
$fn2($var)
问题是,您的变量
$fn2
超出了第一个匿名函数的作用域。因此,只需将$fn2
的赋值放在$fn1
之前,然后像在use()
中一样传递变量,例如$fn1=function($var)use($app,$fn2){
在使用变量之前需要定义$fn2
编辑:要在中传递变量,请使用()
首先要澄清几件事,链接是传统上归因于面向对象范式的东西(如方法链接),其中一个方法返回一个实例,以便根据每个连续方法的返回值将多个方法调用链接在一起 在函数范式中您所做的通常被称为-或其参数接受另一个函数或返回函数的函数 现有代码的问题是PHP中的函数不会隐式地从全局范围(请参阅)或任何其他块范围导入变量。唯一需要注意的是,当它们在对象上下文中定义时(即在非静态的类方法内部),它们确实可以访问
$this
或对象实例
因此,您必须使用use
语句从闭包外部的全局或局部范围显式导入变量,在您的示例中,该语句用于导入变量$app
。尽管在函数范例中,导入触及外部范围的变量可能并不总是一个优雅的解决方案明,这就是你想要的
因此,在高阶函数的本质上,您可以用以下方式更简洁地表达您的代码
$app = 'App here';
$fn2 = function($var) use($app){
echo $var;
};
$fn1 = function($var) use($app, $fn2){
$fn2($var);
};
$fn1('variable');
这将为您提供输出
变量变量$fn2
仍将超出匿名函数pass$fn2
的范围,作为$fn1
的参数。
$app = 'App here';
$fn2 = function($var) use($app){
echo $var;
};
$fn1 = function($var) use($app, $fn2){
$fn2($var);
};
$fn1('variable');
$app = 'App here';
$fn2 = function($var) use($app){
echo $var;
};
$fn1 = function($var) use($app, $fn2){
$fn2($var);
};
$fn1('variable');
$app = 'App here';
$fn1 = function($fn2, $var) use($app){
$fn2($var);
};
$fn2 = function($var) use($app){
echo $var;
};
$fn1($fn2, 'variable');