「求助」关于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"]<br /> );<br /> //如果指定了回调函数,依据观察者返回的数据,做出具体的操作<br /> if (isset($this->_aEventStack[$iKey]["fHandler"]) && !$mCallback) {<br /> $func = $this->_aEventStack[$iKey]["fHandler"];<br /> $func($mCallback);<br /> } else {<br /> $func(null);<br /> }<br /> }<br /> }<br /> ##R##<br /> public function removeWatcher($sWatchStamp) {<br /> //移除指定的观察者<br /> }<br /> }<br /> <br /> <br /> ?><br />