Heim >Backend-Entwicklung >PHP-Tutorial > 「」关于PHP回调函数的疑问

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

WBOY
WBOYOriginal
2016-06-13 12:33:05782Durchsuche

「求助」关于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<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 />
?>



/EventStack.php

<?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 />
PHP?回调 回调 PHP
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn