日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內(nèi)最全IT社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當前位置:首頁 > php開源 > 綜合技術(shù) > PHP下用B/S編程模式去實現(xiàn)C/S軟件編程模式下的插件引擎功能!

PHP下用B/S編程模式去實現(xiàn)C/S軟件編程模式下的插件引擎功能!

來源:程序員人生   發(fā)布時間:2015-03-26 09:35:21 閱讀次數(shù):2539次

<?php /** * 摘取天上星 版 插件引擎 第2版 version 2.0 * By: 摘取天上星! * Emali: happy.yin@qq.com * Date: 2012升級版 **/ $plugin_arr=array(); $plugin_meta=array(); $plugin_remove=array(); $action_arr=array(); $action_meta=array(); $action_remove=array(); $idx=0; /* * 履行插件引擎中捆綁的所有函數(shù)事件(函數(shù)履行順序參加addPlugin函數(shù)添加插件時的第4個參數(shù)數(shù)字,數(shù)字越大優(yōu)先級越高) * $tag 要履行的函數(shù)集插件標簽名 * $args 要往函數(shù)中傳入的參數(shù),順次按順序填寫,鍵名同addPlugin添加插件時第3個參數(shù)傳入的鍵名、數(shù)量對應(yīng)1致,鍵名對應(yīng)的值即傳入的參數(shù)值, * 該插件引擎是有返回值的插件引擎 */ function doPlugin($tag,$args=array()){ global $plugin_arr,$plugin_remove; $first=array_search(current($args),$args); if(empty($plugin_arr[$tag])) return $args[$first]; if(isset($plugin_remove[$tag])){ foreach($plugin_remove[$tag] as $func){ removePlugin($tag,$func); } } krsort($plugin_arr[$tag]); foreach($plugin_arr[$tag] as $plugins){ foreach($plugins as $plugins){ $plugins['args']=array_merge($plugins['args'],$args); $args[$first]=call_user_func_array($plugins['func'],array_slice($plugins['args'],0,$plugins['args_count'])); } } return $args[$first]; } /* 第1個參數(shù)為自定義標簽集名, * 第2個參數(shù)是你要向標簽集里添加的函數(shù)名, * 第3個數(shù)組參數(shù)為第2個參數(shù)strAndStr1函數(shù)對應(yīng)的參數(shù)集,有多少個函數(shù)參數(shù),就需要添加多少個數(shù)組元素, 參數(shù)依照前后順序順次填寫,鍵值為空便可,且插件里所有函數(shù)的參數(shù)個數(shù)必須1致,1個以上的參數(shù),可多個, 這里的傳參數(shù)組只需要預(yù)寫好鍵名便可,在調(diào)用doPlugin插件時給對應(yīng)的鍵值傳入鍵名對應(yīng)的實際參數(shù)值便可 * 第4個參數(shù)為排序參數(shù),從1到10的純數(shù)字,數(shù)值越大履行優(yōu)先級越高,反之越小,默許為值為最大優(yōu)先級10 * addPlugin('cleanText','strAndStr1',array('str'=>'','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; } /* * 立即刪除函數(shù)集標簽中 的某個函數(shù) * 第1個參數(shù)為自定義函數(shù)集標簽名稱 * 第2個參數(shù)為要從函數(shù)集里 刪除的單個函數(shù)名稱 */ 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時刪除函數(shù)集標簽中 的某個函數(shù)(在doPlugin中的插件函數(shù)履行前刪除,并且刪除后履行插件引擎!) * 第1個參數(shù)為自定義函數(shù)集標簽名稱 * 第2個參數(shù)為要從函數(shù)集里 刪除的單個函數(shù)名稱 */ function addRemovePlugin($tag,$func){ global $plugin_remove; if(in_array($func,(array)$plugin_remove[$tag])) return ; $plugin_remove[$tag][]=$func; } /* * 以下履行插件方法同上述有返回值的履行插件使用方法對應(yīng)1致, * 唯1的區(qū)分是沒有返回值 */ /* * 履行插件引擎 */ 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'])); } } } /* * 向插件引擎里添加函數(shù) */ 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; } /* * 從插件引擎里刪除 履行的函數(shù) */ 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]); } } /* * 添加預(yù)刪除函數(shù),該函數(shù)會在下次履行插件引擎時,在函數(shù)集調(diào)用前被刪除 */ function addRemoveAction($tag,$func){ global $action_remove; if(in_array($func,(array)$action_remove[$tag])) return ; $action_remove[$tag][]=$func; } /* 摘取天上星 - 期待更深層次的擴大緊縮...*/ ?>


<?php

//履行例子以下

//為插件引擎準備好要用到的測試函數(shù)
function str2str2($str){
  return '<p>P標簽開始 '.$str.' P標簽結(jié)束<p/>';
}
function str3str3($str){
  return '<b style="color:red">b標簽開始 '.$str.' b標簽結(jié)束<b/>';

}

//注意:在測試3個例子時,1定要1個1個的測試,測試時請注釋掉其他過剩的例子,否則將沒法看到插件引擎權(quán)限優(yōu)先級的 實際對照效果產(chǎn)生異常結(jié)果!

例子1:
//str2str2函數(shù)的履行優(yōu)先級小于str3str3,這里先履行str3str3($str)函數(shù)后履行str2str2($str)函數(shù);
//實際運行流程解刨以下:
$str=str3str3('這是要像插件里所有函數(shù)傳入的參數(shù)這里函數(shù)str3str3的履行優(yōu)先級高于str2str2');
$str=str2str2($str);
echo $str; 
/*輸出結(jié)果閱讀器里查看HTML源代碼得到以下內(nèi)容:
 <p>P標簽開始 <b style="color:red">b標簽開始 這是要像插件里所有函數(shù)傳入的參數(shù)這里函數(shù)str3str3的履行優(yōu)先級高于str2str2 b標簽結(jié)束<b/> P標簽結(jié)束<p/>
 */
addPlugin('cleanText','str2str2',array('str'=>''),1);
addPlugin('cleanText','str3str3',array('str'=>''),10);
echo doPlugin('cleanText',array('str'=>'這是要像插件里所有函數(shù)傳入的參數(shù)這里函數(shù)str3str3的履行優(yōu)先級高于str2str2'));
//例子2:
addPlugin('cleanText','str2str2',array('str'=>''),10);
addPlugin('cleanText','str3str3',array('str'=>''),1);
echo doPlugin('cleanText',array('str'=>'這是要像插件里所有函數(shù)傳入的參數(shù)這里函數(shù)str2str2的履行優(yōu)先級高于str3str3'));
/*運行結(jié)果HTML頁面源代碼以下:
<b style="color:red">b標簽開始 <p>P標簽開始 這是要像插件里所有函數(shù)傳入的參數(shù)這里函數(shù)str2str2的履行優(yōu)先級高于str3str3 P標簽結(jié)束<p/> b標簽結(jié)束<b/>
*/
//例子3:
addPlugin('cleanText','str2str2',array('str'=>''),1);
addPlugin('cleanText','str3str3',array('str'=>''),1);
echo doPlugin('cleanText',array('str'=>'當權(quán)限排序值大小1致時,后面的函數(shù)權(quán)限優(yōu)先級要小于前面的故先添加的函數(shù)先履行,這里函數(shù)str3str3的履行優(yōu)先級小于str2str2'));
/* 履行后的HTML源代碼結(jié)果以下:
<b style="color:red">b標簽開始 <p>P標簽開始 當權(quán)限排序值大小1致時,后面的函數(shù)權(quán)限優(yōu)先級要小于前面的故先添加的函數(shù)先履行,這里函數(shù)str3str3的履行優(yōu)先級小于str2str2 P標簽結(jié)束<p/> b標簽結(jié)束<b/>

*/


//測試doAction履行插件的例子(該插件沒有返回值,只履行!)
/*注,該插件為伍返回值插件,故而只用做輸出 或直接履行場合,優(yōu)先級同doPlugin插件優(yōu)先級設(shè)置,故不詳述!
function alertstr($str){
  echo "<script>alert('$str');</script>";
}
function alertstr2($str){
  echo $str.'1+2';
}
addAction('alert','alertstr',array('str'=>''),1);
addAction('alert','alertstr2',array('str'=>''),10);
doAction('alert',array('str'=>'要彈出的參數(shù)'));
//運行后的HTML源代碼結(jié)果以下:

//要彈出的參數(shù)1+2<script>alert('要彈出的參數(shù)');</script>

?>

生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學(xué)習(xí)有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 激情免费网址 | 国产精品一区二区三区久久久 | 亚洲精品高清视频在线观看 | 中文字幕综合网 | 欧美日韩三级在线 | 日韩在线观看视频免费 | 成人在线一区二区 | 国产精品电影网 | 日韩精品在线免费观看 | 国产午夜视频在线观看 | 国产成人福利 | 国产精品久久久久久久婷婷 | 日本色综合 | 日本精品视频一区二区三区四区 | 黄在线网站 | 亚洲色欲色欲www | 久久这里都是精品 | 国产一区中文字幕 | 国产精品videossex | 欧美一区二区三区的 | 亚洲 成人 一区 | 精品在线一区二区三区 | 99久久国产视频 | 一级毛片在线 | 美女久久| 日韩城人免费 | 99综合久久| 欧美一区二区三区电影 | 成人欧美一区二区三区黑人动态图 | www.国产精品.com | 男人操女人免费 | 久久久久久精 | 色综合一区二区三区 | 国产黄色片在线观看 | 91精品网站 | 亚洲精品视频自拍 | 亚洲在线一区二区三区 | 热99精品| 91官网在线观看 | 免费午夜av | 正在播放国产一区二区 |