php

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

dafenqi
2023-08-09 / 0 评论 / 14 阅读 / 正在检测是否收录...

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

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;

0

Deprecated: strtolower(): Passing null to parameter #1 ($string) of type string is deprecated in /www/wwwroot/testblog.58heshihu.com/var/Widget/Archive.php on line 1032

评论 (0)

取消