巅云智能建站平台搭建版(创业流派版)火爆上线,毕生受权!新增:文章智能收罗+全站真静态打包+都会分站+智能小法式+不法词过滤+H5自顺应+智能链词等功效功效概况
赞助文档Help

PHP基于反射机制完成插件的可插拔设想详解

一佰互联网站建造(www.taishanly.com) 宣布日期 2020-04-26 09:03:48 阅读数: 106

本文实例报告了PHP基于反射机制完成插件的可插拔设想。分享给大师供大师参考,详细以下:

说PHP和ASP同等的伴侣们能够就此打住了,PHP撑持反射,并且仍是很是的壮大。好了,咱们起头明天的话题。

功效描写:

页面具有一个主导航菜单,外头有默许毗连多少。
插件同一寄存在一个目次,插件载入后会主动在导航菜单中增添上本身所需的链接。
插件载入时可履行必然的操纵。
静态增删插件无需修改代码。

终究结果:

首页,插件1,插件2

"首页"是体系自带的菜单项。"插件1"和"插件2"是由插件注册的菜单项。

完成进程:

1. 文件布局

Learn
plugin
plugin1.php
plugin2.php
test.php

如斯设想后,页面进口为test.php,插件都寄存在plugin目次下,只需遍历plugin目次就能够找到一切的插件了。

2. 设想插件接口

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

3. 插件外部完成接口

Plugin1完成接口:

<?php
Class Welcome implements IPlugin{
static function getname(){
return "Welcome (Plugin)";
}
static function getMenu(){
return array(
"text"=>"插件1′,
"href"=>"http://www.google.com"
);
}
static function init(){
echo self::getname() . " 载入中…<br />";
}
}
?>

Plugin2完成接口:

<?php
Class ShowAD implements IPlugin{
static function getname(){
return "Show AD (Plugin)";
}
static function getMenu(){
return array(
"text"=>"插件2′,
"href"=>"http://www.live.com"
);
}
static function init(){
echo self::getname() . " 载入中…<br />";
}
}
?>

4. 主页面初始化主导航菜单

$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. 过滤出完成了IPlugin接口的插件,并履行插件注入操纵。

// 反射履行体例(注入菜单)
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);
//归并菜单项
$menu = array_merge($menu, array($menuItem));
}
}

7. 主页面输出菜单HTML

foreach ($menu as $m){
echo "<a href="{$m["href"]}">{$m["text"]}</a> ";
}

注重第6部便是PHP的反射操纵,是否是很简略呢。阐发下此中代码,一个完全的反射操纵机会只要2行代码!

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

好了,反射的根基功效就先容到这了。固然了,PHP的反射功效不只仅如斯,有乐趣的本身挖掘去吧。

更多对于PHP相干内容感乐趣的读者可检查本站专题:《PHP数组(Array)操纵技能大全》、《php排序算法总结》、《PHP经常利用遍历算法与技能总结》、《PHP数据布局与算法教程》、《php法式设想算法总结》、《PHP数学运算技能总结》、《php正则抒发式用法总结》、《PHP运算与运算符用法总结》、《php字符串(string)用法总结》及《php罕见数据库操纵技能汇总》

但愿本文所述对大师PHP法式设想有所赞助。

一佰互联是天下着名建站品牌办事商,咱们有九年、网站建造、网页设想、php开辟和域名注册及假造主机办事经历,供给的办事更是天下着名。最近几年来还整合团队上风自立开辟了可视化多用户”“3.0平台版,拖拽排版网站建造设想,轻松完成pc站、手机微网站、小法式、APP一体化全网营销网站扶植 ,已胜利的为天下上百家收集公司供给自助建站平台搭建办事。

相干消息more

15
04月
国庆双11电商大促不得限制退货:赠品也“三包

09月30日报道:中秋节、国庆节、双11、双12,进入金九银十今后,电商促销节点愈来愈多。本年电商“大促”中,若是再... >>概况

26
03月
Motrix-清新开源收费的万能下载东西,附

简介:Motrix 是一款开源收费且界面很是清新繁复的万能型下载软件,它跨平台撑持 Windows、Mac、Linux 三大体系,能够撑持下... >>概况

05
04月
网页设想|若何报告好一个品牌故事?

简介:设想是一种抒发体例。它向那些看到它的人转达了一个视觉信息。它也能转达一个故事,不管是表示性的仍是清楚的陈说。作为一位网页设想师,你的工... >>概况

20
04月
对于HTML5 Placeholder新标签

placeholder 属性是 HTML5 中的新属性,俗名叫“占位符”,功效近似于输出框在获得核心时,时面的默许值... >>概况

高端网站扶植

美工统筹SEO,为企业电子商务营销助力!

德律风:

023-85725751
建站

产物

域名注册 假造主机 云办事器 企业邮局
智能建站 APP打包 微站/小法式 创业平台
网站推行 媒体营销 智能收罗 AI机械人
400德律风 短信营销 店销机械人
私家定制 流派网站