PHP的回调机制,是通过使用 call_user_func(call_user_func_array)实现的。回调函数可以很好地将一些功能从核心功能剥离开。
回调机制类似于一种通知机制,在异步编程中经常用到。 就是 我让你做一件事情,你做好了,通过我提供的接口通知我。

代码如下。

<?php
//php 回调函数示例
class Callback{
	public function call(callable $Callback,$args) {
		call_user_func($Callback, $args);//核心实现
	}
}

$Callback = new Callback();
$Callback->call(function ($success) {//传入回调函数,这里以匿名函数实现,也可以传入函数名,或对象的方法名等
	echo "call $success" ;
},999);
//call 999





//下面再看一个事件回调的示例,利用观察者模式,在事件编程中经常用到。

class Event{
	public $eventMap = array();
    function on($evtname , callable $callable ){ //注册一个事件上的响应回调函数
    	$this->eventMap[$evtname][]=$callable;
    }
    function trigger($evtname , $args=null){ //触发一个事件,也就是循环调用所有响应这个事件的回调函数
    	foreach ($this->eventMap[$evtname] as $key => $value) {
    		call_user_func_array( $this->eventMap[$evtname][$key] , $args);
    	}
    }
}



$MyClass = new Event();
$MyClass->on('post' , function($a , $b ){
	echo " a = $a ; \n ";
	echo " b = $b ; \n ";
	echo " a + b = ".( $a + $b) . ";\r\n ";
} );

$MyClass->on('post' , function($a , $b ){
	echo " a = $a ; \n ";
	echo " b = $b ; \n ";
	echo " a * b = ".( $a * $b) . ";\r\n ";
} );
 $MyClass->trigger('post' , array( 123 , 321 )  );//触发事件
 //a = 123 ; 
 //b = 321 ; 
 //a + b = 444;

 //a = 123 ; 
 //b = 321 ; 
 //a * b = 39483;

 

转载请注明来自Lenix的博客,地址http://blog.p2hp.com/archives/4428

关于PHP的回调函数及事件回调的用法
标签: