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的回调函数及事件回调的用法