Loading... # [关于PHP的回调函数及事件回调的用法](https://blog.p2hp.com/archives/4428) 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; 最后修改:2023 年 08 月 09 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏