这篇文章主要介绍了php实现事件监听与触发的方法,可实现时间的绑定、触发与注销等功能,具有一定的参考借鉴价值,需要的朋友可以参考下
本文实例讲述了php实现事件监听与触发的方法。分享给大家供大家参考。具体分析如下:
闲来无事,,想了想PHP如何实现事件监听,参考了jQuery的事件绑定思路,简单的实现了一下。
主要功能:
1.绑定事件 支持一个事件绑定多个动作,支持绑定一次性事件
2.触发事件
3.注销事件
复制代码 代码如下:
class Event
{
protected static $listens = array();
public static function listen($event, $callback, $once=false){
if(!is_callable($callback)) return false;
self::$listens[$event][] = array('callback'=>$callback, 'once'=>$once);
return true;
}
public static function one($event, $callback){
return self::listen($event, $callback, true);
}
public static function remove($event, $index=null){
if(is_null($index))
unset(self::$listens[$event]);
else
unset(self::$listens[$event][$index]);
}
public static function trigger(){
if(!func_num_args()) return;
$args = func_get_args();
$event = array_shift($args);
if(!isset(self::$listens[$event])) return false;
foreach((array) self::$listens[$event] as $index=>$listen){
$callback = $listen['callback'];
$listen['once'] && self::remove($event, $index);
call_user_func_array($callback, $args);
}
}
}
以下是一些调用的例子:
复制代码 代码如下:
// 增加监听walk事件
Event::listen('walk', function(){
echo "I am walking...n";
});
// 增加监听walk一次性事件
Event::listen('walk', function(){
echo "I am listening...n";
}, true);
// 触发walk事件
Event::trigger('walk');
/*
I am walking...
I am listening...
*/
Event::trigger('walk');
/*
I am walking...
*/
Event::one('say', function($name=''){
echo "I am {$name}n";
});
Event::trigger('say', 'deeka'); // 输出 I am deeka
Event::trigger('say', 'deeka'); // not run
class Foo
{
public function bar(){
echo "Foo::bar() is calledn";
}
public function test(){
echo "Foo::foo() is called, agrs:".json_encode(func_get_args())."n";
}
}
$foo = new Foo;
Event::listen('bar', array($foo, 'bar'));
Event::trigger('bar');
Event::listen('test', array($foo, 'test'));
Event::trigger('test', 1, 2, 3);
class Bar
{
public static function foo(){
echo "Bar::foo() is calledn";
}
}
Event::listen('bar1', array('Bar', 'foo'));
Event::trigger('bar1');
Event::listen('bar2', 'Bar::foo');
Event::trigger('bar2');
function bar(){
echo "bar() is calledn";
}
Event::listen('bar3', 'bar');
Event::trigger('bar3');
希望本文所述对大家的PHP程序设计有所帮助。

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

PhpStorm Mac version
The latest (2018.2.1) professional PHP integrated development tool

Atom editor mac version download
The most popular open source editor

WebStorm Mac version
Useful JavaScript development tools

SecLists
SecLists is the ultimate security tester's companion. It is a collection of various types of lists that are frequently used during security assessments, all in one place. SecLists helps make security testing more efficient and productive by conveniently providing all the lists a security tester might need. List types include usernames, passwords, URLs, fuzzing payloads, sensitive data patterns, web shells, and more. The tester can simply pull this repository onto a new test machine and he will have access to every type of list he needs.

EditPlus Chinese cracked version
Small size, syntax highlighting, does not support code prompt function
