首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > PHP >

「」关于PHP回调函数的疑问

2013-11-19 
「求助」关于PHP回调函数的疑问本帖最后由 kericw 于 2013-11-01 15:37:40 编辑本人较菜,请问各位侠士,如何

「求助」关于PHP回调函数的疑问
本帖最后由 kericw 于 2013-11-01 15:37:40 编辑 本人较菜,请问各位侠士,如何在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

if (!defined("__IS_ROOT")) die("Access Denied");

global $EventStack;

//闭包函数(回调)
$fGetSettings = function($oSettingDaemon) {
//处理回调返回的系统设置数据模型
echo $oSettingDaemon;
};

//请求数据原型
$EventStack->addEvent(
"DATA_REQUEST",
serialize(array(
array(
"request" => "settingDaemon"
)
)),
$fGetSettings,
null
);
?>



/EventStack.php

<?php
//事件堆栈处理组件
/*数
 */
//已知的事件戳记
/*
 */

if (!defined("__IS_ROOT")) die("Access Denied");

class EventStack extends Init{
private $_aWatcherRegistry = array();//已注册的观察者列表
private $_aEventStack = array();//事件堆栈
private $_aCallbackRegistry = array();//已注册的回调函数

function __construct() {
}
function __destruct() {
//将关键信息存储至数据源的Log表
//根据调试开关,决定是否输出调试信息至页面
}
function __toString() {
}
##A##
public function addEvent($sStamp = "ISSUE_TRACK", $sValue, $fHandler = null, $mScope = null) {
/*sStamp: 此条消息的戳记
 *sValue: 序列化的数组
 * fHandler(function): 匿名回调函数
 * mScope(mixed type): 回调函数的上下文环境,
 * null表示传入的handler函数是一个全局函数,
 * 字符串类型表示传入的handler函数是scope类的静态函数,
 * 对象类型表示传入的scope是一个对象,handler函数是对象的一个方法
 */
$this->_aEventStack[] = array(
"stamp" => $sStamp,
"value" => $sValue,
"handler" => $fHandler,
"scope" => $mScope,
"timestamp" => time()
);
$iKey =  sizeof($this->_aEventStack) - 1;
$this->notifyWatcher($iKey);
return $iKey;
}
public function addWatcher($oWatcher, $sWatchStamp) {
}
##C##
public function clearEventStack() {
//清空事件堆栈
}
##E##
public function exportEventStack() {
//输出调试信息
}
##G##
public function getStack($iStackId) {
//根据是否提供堆栈序号,返回堆栈列表或指定堆栈的内容
}
##N##
private function notifyWatcher($iKey) {
//推送事件至相应的观察者
if (array_key_exists($this->_aEventStack[$iKey]["stamp"], $this->_aWatcherRegistry)) {
$mCallback = $this->_aWatcherRegistry[$this->_aEventStack[$iKey]["stamp"]](
$this->_aEventStack[$iKey]["stamp"],
$this->_aEventStack[$iKey]["value"],
$this->_aEventStack[$iKey]["handler"],
$this->_aEventStack[$iKey]["scope"]
);
//如果指定了回调函数,依据观察者返回的数据,做出具体的操作
if (isset($this->_aEventStack[$iKey]["fHandler"]) && !$mCallback) {
$func = $this->_aEventStack[$iKey]["fHandler"];
$func($mCallback);
} else {
$func(null);
}
}
}
##R##
public function removeWatcher($sWatchStamp) {
//移除指定的观察者
}
}


?>
PHP?回调 回调 PHP
[解决办法]
只看到一次 $fGetSettings

热点排行