Maison >développement back-end >tutoriel php > 相关PHP回调函数的乌云
有关PHP回调函数的乌云。
本人较菜,请问各位侠士,如何在PHP中达到EventStack的NotifyWatcher方法可以将取得的数据返还给welcome.php指定的回调函数,我哪里写的不对啊 ???
出现的错误为:Fatal error: Function name must be a string in /home/latel/Workspace/new_zhebo/module/EventStack.php on line ××
/app/welcome.php
<?php<br /> <br /> if (!defined("__IS_ROOT")) die("Access Denied");<br /> <br /> global $EventStack;<br /> <br /> //闭包函数(回调)<br /> $fGetSettings = function($oSettingDaemon) {<br /> //处理回调返回的系统设置数据模型<br /> echo $oSettingDaemon;<br /> };<br /> <br /> //请求数据原型<br /> $EventStack->addEvent(<br /> "DATA_REQUEST",<br /> serialize(array(<br /> array(<br /> "request" => "settingDaemon"<br /> )<br /> )),<br /> $fGetSettings,<br /> null<br /> );<br /> ?>
<?php <br /> //事件堆栈处理组件<br> /*数<br> */<br> //已知的事件戳记<br> /*<br> */<br> <br> if (!defined("__IS_ROOT")) die("Access Denied");<br> <br> class EventStack extends Init{<br> private $_aWatcherRegistry = array();//已注册的观察者列表<br> private $_aEventStack = array();//事件堆栈<br> private $_aCallbackRegistry = array();//已注册的回调函数<br> <br> function __construct() {<br> }<br> function __destruct() {<br> //将关键信息存储至数据源的Log表<br> //根据调试开关,决定是否输出调试信息至页面<br> }<br> function __toString() {<br> }<br> ##A##<br> public function addEvent($sStamp = "ISSUE_TRACK", $sValue, $fHandler = null, $mScope = null) {<br> /*sStamp: 此条消息的戳记<br> *sValue: 序列化的数组<br> * fHandler(function): 匿名回调函数<br> * mScope(mixed type): 回调函数的上下文环境,<br> * null表示传入的handler函数是一个全局函数,<br> * 字符串类型表示传入的handler函数是scope类的静态函数,<br> * 对象类型表示传入的scope是一个对象,handler函数是对象的一个方法<br> */<br> $this->_aEventStack[] = array(<br> "stamp" => $sStamp,<br> "value" => $sValue,<br> "handler" => $fHandler,<br> "scope" => $mScope,<br> "timestamp" => time()<br> );<br> $iKey = sizeof($this->_aEventStack) - 1;<br> $this->notifyWatcher($iKey);<br> return $iKey;<br> }<br> public function addWatcher($oWatcher, $sWatchStamp) {<br> }<br> ##C##<br> public function clearEventStack() {<br> //清空事件堆栈<br> }<br> ##E##<br> public function exportEventStack() {<br> //输出调试信息<br> }<br> ##G##<br> public function getStack($iStackId) {<br> //根据是否提供堆栈序号,返回堆栈列表或指定堆栈的内容<br> }<br> ##N##<br> private function notifyWatcher($iKey) {<br> //推送事件至相应的观察者<br> if (array_key_exists($this->_aEventStack[$iKey]["stamp"], $this->_aWatcherRegistry)) {<br> $mCallback = $this->_aWatcherRegistry[$this->_aEventStack[$iKey]["stamp"]](<br> $this->_aEventStack[$iKey]["stamp"],<br> $this->_aEventStack[$iKey]["value"],<br> $this->_aEventStack[$iKey]["handler"],<br> $this->_aEventStack[$iKey]["scope"] <div class="clear"> </div>