PHP头条
热点:

用PHP实现的事件机制-PHP源码


php代码


* @since 2007-7-20
*/
class Event {
   private $callbacks = array();
   private $holder;

   function __construct() {
       $bt = debug_backtrace();
       if (count($bt) < 2) {
           $this->holder = null;
           return;
       }
       $this->holder = &$bt[1]['object'];
   }
   
   function attach() {
       $args = func_get_args();
       switch (count($args)) {
           case 1:
               if (is_callable($args[0])) {
                   $this->callbacks[]= $args[0];
                   return;
               }
               break;
           case 2:
               if (is_object($args[0]) && is_string($args[1])) {
                   $this->callbacks[]= array(&$args[0], $args[1]);
               }
               return;
           default:
               return;
       }
   }

   function notify() {
       $bt = debug_backtrace();
       if ($this->holder && 
                ((count($bt) >= 2 && $bt[count($bt) - 1]['object'] !== $this->holder)
                || (count($bt) < 2))) {
           throw(new Exception('Notify can only be called in holder'));   
       }
       foreach ($this->callbacks as $callback) {
           $args = func_get_args();
           call_user_func_array($callback, $args);
       }
   }
}

www.phpzy.comtrue/php/33835.htmlTechArticle用PHP实现的事件机制-PHP源码 php代码 * @since 2007-7-20*/class Event { private $callbacks = array(); private $holder; function __construct() { $bt = debug_backtrace(); if (count($bt) holder = null; return; } $this->holder = #39;o...

相关文章

PHP之友评论

今天推荐