php实现事件监听与触发的方法,你用过吗?

Posted PHP自学中心

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php实现事件监听与触发的方法,你用过吗?相关的知识,希望对你有一定的参考价值。


文章来自于脚本之家

链接:https://www.jb51.net/article/57665.htm

php实现事件监听与触发的方法,你用过吗?






































































































php实现事件监听与触发的方法,你用过吗?

分享教程

php实现事件监听与触发的方法,你用过吗?
 
  

php实现事件监听与触发的方法,你用过吗?

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((arrayself::$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'123); 

 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实现事件监听与触发的方法,你用过吗?的主要内容,如果未能解决你的问题,请参考以下文章

你还记得几个腾讯的开源项目,这十个你用过吗

专为 Python 初学者准备的 IDE 你用过吗?

浏览器的 5 种 Observer,你用过几种?

支付宝小程序怎么用 你用过吗

.net 平台下三个优秀强劲的开源项目(框架),你用过吗?

Ubuntu是啥东西/ 你用过吗? 好用吗? 怎么用啊 ?