Home >Backend Development >PHP Tutorial >PHP implements event monitoring and triggering example programs_PHP tutorial

PHP implements event monitoring and triggering example programs_PHP tutorial

WBOY
WBOYOriginal
2016-07-13 10:47:03923browse

This article will introduce to you the program codes for implementing event monitoring and triggering in PHP. I hope these methods will be helpful to those in need.

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

The code is as follows Copy code
 代码如下 复制代码

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);
        }
    }
}

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' = & gt; $ callback, 'once' = & gt; $ 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;                                                                                                                                               $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:

The code is as follows
 代码如下 复制代码

// 增加监听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');

Copy code
//Add listening to 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');

http://www.bkjia.com/PHPjc/632901.htmlwww.bkjia.comtrue
http: //www.bkjia.com/PHPjc/632901.html
TechArticle
This article will introduce to you students about the implementation of event monitoring and triggering example program code in PHP. I hope some methods will help Friends in need, please help. I have nothing to do and thought about it...
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