国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

php實現事件監聽與觸發的方法

2024-05-04 23:27:43
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了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程序設計有所幫助。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 酉阳| 邵阳县| 自治县| 阜阳市| 驻马店市| 北海市| 二连浩特市| 德兴市| 日土县| 绵阳市| 米林县| 伊川县| 安岳县| 宣恩县| 星子县| 林周县| 景德镇市| 郑州市| 高邮市| 昭苏县| 巢湖市| 广南县| 泰州市| 启东市| 拉孜县| 克山县| 开封市| 会理县| 德州市| 霍山县| 裕民县| 江北区| 大英县| 大理市| 邹平县| 青神县| 松潘县| 南澳县| 樟树市| 樟树市| 永清县|