ホームページ >バックエンド開発 >PHPチュートリアル >''PHP コールバック関数に関する質問

''PHP コールバック関数に関する質問

WBOY
WBOYオリジナル
2016-06-13 12:33:05782ブラウズ

「ヘルプ」PHP コールバック関数に関する質問

この投稿は kericw によって最終編集されました (2013-11-01 15:37:40) 初心者なので皆さんにお聞きしたいのですが、PHPのEventStackのNotifyWatcherメソッドを使って、welcome.phpで指定したコールバック関数に取得したデータを返すにはどうすればよいでしょうか?どこの書き方が間違っていたのでしょうか? ? ?

発生するエラーは次のとおりです: 致命的エラー: 関数名は /home/latel/Workspace/new_zhebo/module/EventStack.php の ××
行にある文字列である必要があります
/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
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。