Home  >  Article  >  Backend Development  >  How to implement event monitoring and triggering in php, php event monitoring and triggering_PHP tutorial

How to implement event monitoring and triggering in php, php event monitoring and triggering_PHP tutorial

WBOY
WBOYOriginal
2016-07-13 10:13:271006browse

How to implement event monitoring and triggering in php, php event monitoring and triggering

The example in this article describes how to implement event monitoring and triggering in PHP. Share it with everyone for your reference. The specific analysis is as follows:

I had nothing to do and thought about how to implement event monitoring in PHP. I referred to jQuery’s event binding idea and implemented it simply.

Main functions:

1. Binding events supports binding multiple actions to one event and supports binding one-time events
2. Trigger event
3. Logout event

Copy code The code is as follows:
class Event
{
protected static $listens = array();
       
Public static function listen($event, $callback, $once=false){
If(!is_callable($callback)) return false;
​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​          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;
                                                                                                                                              $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);
          }
}
}

Here are some examples of calls:


Copy code The code is as follows:
//Add monitoring walk event
Event::listen('walk', function(){
echo "I am walking...n";
});
// Add one-time listening event for walk
Event::listen('walk', function(){
echo "I am listening...n";
}, true);
// Trigger walk event
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'); // Output 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');

I hope this article will be helpful to everyone’s PHP programming design.

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/915435.htmlTechArticleHow to implement event monitoring and triggering in php, php event monitoring and triggering This article describes the implementation of event monitoring and triggering in php method. Share it with everyone for your reference. The specific analysis is as follows:...
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn