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

相关PHP回调函数的乌云

2013-11-19 
有关PHP回调函数的乌云。本人较菜,请问各位侠士,如何在PHP中达到EventStack的NotifyWatcher方法可以将取得

有关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
 
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) {
        //移除指定的观察者
    }
}
 
 
?>


[解决办法]
你给全错误信息不经行了吗?
Fatal error: Function name must be a string in C:\wamp\www\newzhebo\module\EventStack.php on line 157
不就是 EventStack.php 的 157 行出错吗?
 EventStack.php
143    private function toast($iKey) {
144        //推送事件至相应的观察者
145        if (array_key_exists($this->_aEventStack[$iKey]["stamp"], $this->_aWatcherRegistry)) {
146            $mCallback = $this->_aWatcherRegistry[$this->_aEventStack[$iKey]["stamp"]](
147                $this->_aEventStack[$iKey]["stamp"],
148                $this->_aEventStack[$iKey]["value"]
149            );
150            //如果指定了回调函数,依据观察者返回的数据,做出具体的操作
151            if (isset($this->_aEventStack[$iKey]["fHandler"]) && !$mCallback) {
152                echo $func = $this->_aEventStack[$iKey]["fHandler"];
153                echo 1;
154                $func($mCallback);
155            } else {
156                echo 2;
157                $func(null); //这个 $func 在哪里赋值的?
            }
        }
    }

154 的是在 152 赋值的,哪 157 的 $func 在哪里赋值的?
 
至少要把 $func = $this->_aEventStack[$iKey]["fHandler"]; 放到条件分支外面吧?

热点排行