php 中的另一个方法中的一个匿名方法调用

One anonymous method call in another method in php

我在另一个匿名方法中调用匿名方法时遇到问题。

<?php
    $x = function($a)
    {
        return $a;
    };
    $y = function()
    {
        $b = $x("hello world a");
        echo $b;
    };
    $y(); 
?>

错误:

Notice: Undefined variable: x in C:\xampp\htdocs\tsta.php on line 7

Fatal error: Function name must be a string in C:\xampp\htdocs\tsta.php on line 7

use 添加到您的 $y 函数,然后 $y 函数的范围将看到 $x 变量:

$y = function() use ($x){
    $b = $x("hello world a");
    echo $b;
};

您必须在同一块中使用匿名函数。

<?php

$y = function(){
    $x = function($a){
        return  $a;
    };
    $b = $x("hello world a");
    echo $b;
};
$y();

祝你好运!!

@argobast 和@hiren-raiyani 的回答均有效。最通用的是第一个,但如果第一个匿名函数的唯一消费者是第二个(即 $x 仅被 $y 使用),则后者更合适。

另一种选择是(这需要更改 $y 函数的签名)是传递匿名。作为函数参数的函数:

<?php

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

$y = function(Closure $x)
{
    $b = $x('hello world a');
    echo $b;
};

$y($x);

这种 "dependency injection" 对我来说似乎更清晰一些,而不是使用 'use' 对 $x 的隐藏依赖,但选择取决于你。