时间:2021-07-01 10:21:17 帮助过:20人阅读
'','str2'=>''),1);     * addPlugin('cleanText','strAndStr2',array('str'=>'','str2'=>''),2);    */  function addPlugin($tag,$func,$args=array(),$sort=10){  	global $plugin_arr,$plugin_meta,$idx;  	$plugin_arr[$tag][$sort][++$idx]=array('func'=>$func,'args'=>$args,'args_count'=>sizeof($args));  	$plugin_meta[$tag][$func][$idx]=$sort;  }  /*   * 立即删除函数集标签中 的某个函数   * 第一个参数为自定义函数集标签名称   * 第二个参数为要从函数集里 删除的单个函数名称   */  function removePlugin($tag,$func){  	global $plugin_arr,$plugin_meta;  	if(isset($plugin_meta[$tag][$func])){  		foreach($plugin_meta[$tag][$func] as $idx=>$sort){  			unset($plugin_arr[$tag][$sort][$idx]);  		}  		unset($plugin_meta[$tag][$func]);  	}  }  /*   * 在下次执行doPlugin时删除函数集标签中 的某个函数(在doPlugin中的插件函数执行前删除,并且删除后执行插件引擎!)   * 第一个参数为自定义函数集标签名称   * 第二个参数为要从函数集里 删除的单个函数名称   */  function addRemovePlugin($tag,$func){  	global $plugin_remove;  	if(in_array($func,(array)$plugin_remove[$tag])) return ;  	$plugin_remove[$tag][]=$func;  }  /*   * 如下执行插件方法同上述有返回值的执行插件使用方法对应一致,   * 唯一的区别是没有返回值   */  /*   * 执行插件引擎   */  function doAction($tag,$args=array()){  	global	$action_arr,$action_remove;  	if(empty($action_arr[$tag])) return ;  	if(isset($action_remove[$tag])){  		foreach($action_remove[$tag] as $func){  			removeAction($tag,$func);  		}  	}  	krsort($action_arr[$tag]);  	foreach($action_arr[$tag] as $action_sort){  		foreach($action_sort as $action_idx){  			$action_idx['args']=array_merge($action_idx['args'],$args);  			call_user_func_array($action_idx['func'],array_slice($action_idx['args'],0,$action_idx['args_count']));  		}  	}  }  /*   * 向插件引擎里添加函数   */  function addAction($tag,$func,$args=array(),$sort=10){  	global $action_arr,$action_meta,$idx;  	$action_arr[$tag][$sort][++$idx]=array('func'=>$func,'args'=>$args,'args_count'=>sizeof($args));  	$action_meta[$tag][$func][$idx]=$sort;  }  /*   * 从插件引擎里删除 执行的函数   */  function removeAction($tag,$func){  	global $action_arr,$action_meta;  	if(isset($action_meta[$tag][$func])){  		foreach($action_meta[$tag][$func] as $idx=>$sort){  			unset($action_arr[$tag][$sort][$idx]);  		}  		unset($action_meta[$tag][$func]);  	}  }  /*   * 添加预删除函数,该函数会在下次执行插件引擎时,在函数集调用前被删除   */  function addRemoveAction($tag,$func){  	global $action_remove;  	if(in_array($func,(array)$action_remove[$tag])) return ;  	$action_remove[$tag][]=$func;  }  /* 摘取天上星 - 期待更深层次的扩展压缩...*/?>  
//执行例子如下
//为插件引擎准备好要用到的测试函数P标签开始 '.$str.' P标签结束
';}
//注意:在测试三个例子时,一定要一个一个的测试,测试时请注释掉其他多余的例子,否则将无法看到插件引擎权限优先级的 实际对比效果产生异常结果!
例子一:P标签开始 b标签开始 这是要像插件里所有函数传入的参数这里函数str3str3的执行优先级高于str2str2 b标签结束 P标签结束
P标签开始 这是要像插件里所有函数传入的参数这里函数str2str2的执行优先级高于str3str3 P标签结束
b标签结束P标签开始 当权限排序值大小一致时,后面的函数权限优先级要小于前面的故先添加的函数先执行,这里函数str3str3的执行优先级小于str2str2 P标签结束
b标签结束*/
//要弹出的参数1+2
?>