【问题标题】:Anonymous function not beeing called匿名函数未被调用
【发布时间】:2019-06-25 03:45:06
【问题描述】:

我正在使用下一个功能,我从here得到它

/**
 * Attach (or remove) multiple callbacks to an event and trigger those callbacks when that event is called.
 *
 * @param string $event name
 * @param mixed $value the optional value to pass to each callback
 * @param mixed $callback the method or function to call - FALSE to remove all callbacks for event
 */
function event($event, $value = NULL, $callback = NULL)
{
    static $events;
    // Adding or removing a callback?
    if($callback !== NULL)
    {
        if($callback)
        {
            $events[$event][] = $callback;
        }
        else
        {
            unset($events[$event]);
        }
    }
    elseif(isset($events[$event])) // Fire a callback
    {
        foreach($events[$event] as $function)
        {
            $value = call_user_func($function, $value);
        }
        return $value;
    }
}

我正在添加一些匿名函数,以便在事件执行时调用。

event("Test", NULL ,function() { return "First Call";});
event("Test", NULL ,function() { return "Second Call";});

之后我会做一个简单的回显来查看结果。

<!DOCTYPE html>
<html>
  <body>
    <?php
    $test =  event('Test');
    echo $test;
    ?>
  </body>
</html>

预期的输出是

“第一次通话第二次通话”

但我只是得到

“第二次通话”

起初我认为函数被替换而不是添加到数组中,我回显了数组,似乎调用它在那里,因为输出看起来像这样

数组 ( [0] => 闭包对象 ( ) [1] => 闭包对象 ( ) )

我在这里搜索并尝试使用谷歌搜索,但找不到任何可以指导我找到解决方案的答案。

注意:服务器使用的是PHP版本5.3.10

【问题讨论】:

    标签: php


    【解决方案1】:

    你只返回 1 个值

    试试这个

    foreach($events[$event] as $function)
    {
        $values[] = call_user_func($function, $value);
    }
    return implode(' ', $values);
    

    【讨论】:

    • 天啊,真是个愚蠢的错误,简直不敢相信没有看到那个……事实上,这并不是没有被调用的功能,而是我看到的事实他们的最后输出。这么多时间浪费在这个大声笑上。 ¡ 谢谢!
    【解决方案2】:
    foreach($events[$event] as $function)
        {
            $value .= call_user_func($function, $value).' ';
        }
        return $value;
    

    【讨论】:

    • 我没有说我得到了两次“第二次通话”,我只得到了一次。新吾给出的答案是正确的。在这种情况下,我不会覆盖事件,因为它们被添加到多维数组中,请检查答案中引用的 las 输出。在这种情况下使用静态是为了允许从不同的地方为一个事件添加多个回调。
    • 我编辑了答案,很抱歉我多走了一些路。
    猜你喜欢
    • 2019-01-01
    • 2014-09-11
    • 2013-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多