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