真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

PHP基于反射機(jī)制如何實(shí)現(xiàn)插件的可插拔設(shè)計(jì)-創(chuàng)新互聯(lián)

這篇文章主要介紹PHP基于反射機(jī)制如何實(shí)現(xiàn)插件的可插拔設(shè)計(jì),文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

公司主營業(yè)務(wù):成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)推出鹿城免費(fèi)做網(wǎng)站回饋大家。

具體如下:

功能描述:

頁面擁有一個(gè)主導(dǎo)航菜單,里頭有默認(rèn)連接若干。
插件統(tǒng)一存放在一個(gè)目錄,插件載入后會自動在導(dǎo)航菜單中增加上自己所需的鏈接。
插件載入時(shí)可執(zhí)行一定的操作。
動態(tài)增刪插件無需改動代碼。

最終效果:

首頁,插件1,插件2

"首頁"是系統(tǒng)自帶的菜單項(xiàng)。"插件1"和"插件2"是由插件注冊的菜單項(xiàng)。

實(shí)現(xiàn)過程:

1. 文件結(jié)構(gòu)

Learn
plugin
plugin1.php
plugin2.php
test.php

如此設(shè)計(jì)后,頁面入口為test.php,插件都存放在plugin目錄下,只要遍歷plugin目錄就可以找到所有的插件了。

2. 設(shè)計(jì)插件接口

interface IPlugin{
static function getname();
static function init();
static function getMenu();
}

3. 插件內(nèi)部實(shí)現(xiàn)接口

Plugin1實(shí)現(xiàn)接口:

'插件1′,
'href'=>'http://www.google.com'
);
}
static function init(){
echo self::getname() . " 載入中…";
}
}
?>

Plugin2實(shí)現(xiàn)接口:

'插件2′,
'href'=>'http://www.live.com'
);
}
static function init(){
echo self::getname() . " 載入中…";
}
}
?>

4. 主頁面初始化主導(dǎo)航菜單

$menu[] = array(
'text'=>'首頁',
'href'=>'/test.php'
);

5. 遍歷插件目錄,載入全部插件

$pluginPath = $_SERVER['DOCUMENT_ROOT'] . '/plugin';
$dirHd = opendir($pluginPath);
while ($file = readdir($dirHd)){
$pluginFilePath = $pluginPath . '/' . $file;
if($file!='.' && $file!='..' && is_file($pluginFilePath)){
include "$pluginFilePath";
}
}

6. 過濾出實(shí)現(xiàn)了IPlugin接口的插件,并執(zhí)行插件注入操作。

// 反射執(zhí)行方法(注入菜單)
foreach (get_declared_classes() as $class){
$refClass = new ReflectionClass($class);
if($refClass->implementsInterface('IPlugin')){
//插件初始化
$refClass->getMethod('init')->invoke(null);
//獲取注入菜單
$menuItem = $refClass->getMethod('getMenu')->invoke(null);
//合并菜單項(xiàng)
$menu = array_merge($menu, array($menuItem));
}
}

7. 主頁面輸出菜單HTML

foreach ($menu as $m){
echo "{$m['text']} ";
}

注意第6部就是PHP的反射操作,是不是很簡單呢。分析下其中代碼,一個(gè)完整的反射操作時(shí)機(jī)只有2行代碼!

$refClass = new ReflectionClass($class);
$menuItem = $refClass->getMethod('getMenu')->invoke(null);

以上是“PHP基于反射機(jī)制如何實(shí)現(xiàn)插件的可插拔設(shè)計(jì)”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


網(wǎng)站題目:PHP基于反射機(jī)制如何實(shí)現(xiàn)插件的可插拔設(shè)計(jì)-創(chuàng)新互聯(lián)
轉(zhuǎn)載注明:http://weahome.cn/article/digodj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部