PHP監聽觸發事件

2017-03-28 1479 4 編輯:深圳網站建設 來源:互聯網

主要功能:

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監聽觸發事件.jpg

專業的網站建設公司,深正互聯,如您有網站營銷需求,請您關注我們,或者致電13828884598

本站文章均為深正網站建設摘自權威資料,書籍,或網絡原創文章,如有版權糾紛或者違規問題,請即刻聯系我們刪除,我們歡迎您分享,引用和轉載,但謝絕直接搬磚和抄襲!感謝...
關注深正互聯
我們猜你喜歡
七星彩头尾 梦幻家具80能赚钱么 彩38彩票苹果 又可以带仔又可以赚钱的工作 做钉珠生意赚钱吗 如何利用房子赚钱 爱游贵州麻将下载安装 弥乐福怎么赚钱 森林龙江麻将外挂 类似痘痘的赚钱软件 万家彩票首页 发发优惠券就可以赚钱是真的吗 赚钱de棋牌游戏 做服务小姐赚钱容易吗 过年卖小烟花赚钱吗 网络赚钱的方法大全 游戏直播真的能赚钱吗