Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP匿名函数链接_Php_Anonymous Function - Fatal编程技术网

PHP匿名函数链接

PHP匿名函数链接,php,anonymous-function,Php,Anonymous Function,在上面的示例中,我尝试链接/转发多个匿名函数。但是,在下一行我收到一个错误“注意:未定义变量:fn2” 如何实现匿名函数的链接。问题是您没有在闭包的use语句中将$fn2作为参数传递 请尝试以下代码: $fn2($var) 问题是,您的变量$fn2超出了第一个匿名函数的作用域。因此,只需将$fn2的赋值放在$fn1之前,然后像在use()中一样传递变量,例如$fn1=function($var)use($app,$fn2){在使用变量之前需要定义$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');