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

时间:2015-08-13 13:11:15

标签: php anonymous-function anonymous-methods

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

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

错误:

  

注意:未定义的变量:第7行的C:\ xampp \ htdocs \ tsta.php中的x

     

致命错误:第7行的C:\ xampp \ htdocs \ tsta.php中的函数名必须是字符串

3 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:0)

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

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

<?php

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

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

$y($x);

这种依赖注入&#34;对我来说似乎有点干净,而不是使用&#39;使用&#39;隐藏依赖于$ x,但选择权取决于你。

答案 2 :(得分:-1)

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

<?php

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

祝你好运!!