123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- <?php
- namespace Think;
- class Hook {
- static private $tags = array();
-
- static public function add($tag,$name) {
- if(!isset(self::$tags[$tag])){
- self::$tags[$tag] = array();
- }
- if(is_array($name)){
- self::$tags[$tag] = array_merge(self::$tags[$tag],$name);
- }else{
- self::$tags[$tag][] = $name;
- }
- }
-
- static public function import($data,$recursive=true) {
- if(!$recursive){
- self::$tags = array_merge(self::$tags,$data);
- }else{
- foreach ($data as $tag=>$val){
- if(!isset(self::$tags[$tag]))
- self::$tags[$tag] = array();
- if(!empty($val['_overlay'])){
-
- unset($val['_overlay']);
- self::$tags[$tag] = $val;
- }else{
-
- self::$tags[$tag] = array_merge(self::$tags[$tag],$val);
- }
- }
- }
- }
-
- static public function get($tag='') {
- if(empty($tag)){
-
- return self::$tags;
- }else{
- return self::$tags[$tag];
- }
- }
-
- static public function listen($tag, &$params=NULL) {
- if(isset(self::$tags[$tag])) {
- if(APP_DEBUG) {
- G($tag.'Start');
- trace('[ '.$tag.' ] --START--','','INFO');
- }
- foreach (self::$tags[$tag] as $name) {
- APP_DEBUG && G($name.'_start');
- $result = self::exec($name, $tag,$params);
- if(APP_DEBUG){
- G($name.'_end');
- trace('Run '.$name.' [ RunTime:'.G($name.'_start',$name.'_end',6).'s ]','','INFO');
- }
- if(false === $result) {
-
- return ;
- }
- }
- if(APP_DEBUG) {
- trace('[ '.$tag.' ] --END-- [ RunTime:'.G($tag.'Start',$tag.'End',6).'s ]','','INFO');
- }
- }
- return;
- }
-
- static public function exec($name, $tag,&$params=NULL) {
- if('Behavior' == substr($name,-8) ){
-
- $tag = 'run';
- }
- $addon = new $name();
- return $addon->$tag($params);
- }
- }
|