匿名函数不被称为

时间:2019-06-25 03:45:06

标签: php

我正在使用下一个函数,直到我从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>

预期输出为

  

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

但是我只能得到

  

“第二通电话”

起初我以为该函数将被替换而不是添加到数组中,并且我回显了该数组,并且似乎在该调用中,因为输出看起来像这样

  

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

我已经在这里搜索并尝试了谷歌搜索,但是找不到任何指导我寻求解决方案的答案。

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

2 个答案:

答案 0 :(得分:3)

您只返回1个值

尝试一下

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

答案 1 :(得分:0)

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