045-利用反射机制,简单的实现PHP插件模式
<?php
//利用反射机制,简单的实现PHP插件模式
# 假设,我们有一款开源产品,所有开发者都必须在我定制的需求之上,进行二次开发,
# 而开发完成后的新模块,就是一个不一样的新插件,可以放在特定的位置进行自动加载 #这是我们的开源产品
interface Demo{
# 所有插件都必须实现这个方法
public function msg();
} #这是小明开发的插件-1
class xiaoming implements Demo{
public function msg(){
echo '小明:我就静静地看着你装逼<br/>';
}
} #这是小李开发的插件-2
class xiaoli implements Demo{
public function msg(){
echo '小李:我就装逼了,你能拿我咋滴?<br/>';
}
} #我们先搜索该插件类,并且判断它是否实现了msg方法
function find(){
# 定义描述插件的数组(是一个实例)
$plugin = array(); foreach (get_declared_classes() as $class) {
$reclass = new ReflectionClass($class); # 检测类是否继承与接口Demo
if ($reclass->implementsInterface('Demo')) {
$plugin[] = $reclass;
}
}
return $plugin;
} /**
* 编写一个监听所有插件对应的msg方法 的函数
*/
function myexec(){
foreach (find() as $plugin) {
# 判断该插件是否拥有msg方法
if($plugin->hasMethod('msg')){
# 得到这个方法类的一个实例
$remethod = $plugin->getMethod('msg');
# 如果它是静态方法,则直接调用即可
if($remethod->isStatic()){
$remethod->invoke(null);
}else{
# 先声明插件类的一个实例,然后调用它
$pluins = $plugin->newInstance();
$remethod->invoke($pluins);
}
}
}
} # 监听所有插件
myexec();
?>
045-利用反射机制,简单的实现PHP插件模式的更多相关文章
- Android利用反射机制为实体类属性赋值
在做android项目时,有时会遇到从网络上获取json类型数据,赋值给实体类,实体类属性少可以一个一个的赋值,如果实体类有很多属性,赋值可能就要耗很长的功夫了,幸好Java给我们提供了反射机制.下面 ...
- android 利用反射机制获取drawable中所有的图片资源
public List<Map<String,Object>> getGridData() { list=new ArrayList<Map<String,Obje ...
- 【转】Java利用反射机制访问私有化构造器
Java利用反射机制访问私有化构造器 博客分类: java 我们都知道,当一个类的构造方法被设为私有的时候(private),在其他类中是无法用new来实例化一个对象的. 但是有一种方法可以把带有 ...
- java利用反射机制判断对象的属性是否为空以及获取和设置该属性的值
1.java利用反射机制判断对象的属性是否为空: Map<String,String> validateMap = new LinkedHashMap<String, String& ...
- C# 中利用反射机制拷贝类的字段和属性(拷贝一个类对象的所有东西付给另一个类对象,而不是付给引用地址)
from:https://blog.csdn.net/poxiaohai2011/article/details/27555951 //C# 中利用反射机制拷贝类的字段和属性(拷贝一个类对象的所有东西 ...
- java 中利用反射机制获取和设置实体类的属性值
摘要: 在java编程中,我们经常不知道传入自己方法中的实体类中到底有哪些方法,或者,我们需要根据用户传入的不同的属性来给对象设置不同的属性值,那么,java自带的反射机制可以很方便的达到这种目的,同 ...
- Java——利用反射机制将表单数据自动填充到JavaBean中
以一个案例介绍反射机制的一种常见的使用场景,以及具体实现. 1.本文案例 在编写Java Web应用程序时,使用表单提交数据是一个必不可少的环节,后台对于前台使用表单提交的数据需要能够从请求中解析,并 ...
- 利用反射机制设计Dao
本文主要介绍如何通过Java反射机制设计通用Dao,针对中间使用到的方法进行介绍,不对反射做全面的介绍. 测试方法大家可以直接拷贝去试一下,特地写成比较通用的,注意参数就好了,当然最后还是会附上完整的 ...
- JAVA中利用反射机制进行对象和Map相互转换的方法
JAVA的反射机制主要作用是用来访问对象的属性.方法等等.所以,JAVA中对象和Map相互转换可以利用JAVA的反射机制来实现.例子如下: 一.对象转Map的方法 public static Map& ...
随机推荐
- 百度云bae安装discuz论坛教程
作者:孤风一剑 发布:2013-05-11 13:37 栏目:站长在线 点击:6,846次 41条评论 各位草根们有福啦,弄了几天,终于可以在bae上搭建discuz论坛了,下面我就简 ...
- 对iOS开发的一些认识
从事iOS工作这么久了,我觉得对它的认识也越来越深刻.尤其是越发明白自己从事的工作属于“客户端开发”.“软件工程”分类中. 我更喜欢“客户端开发”这个词语,相对“前端开发”而言.因为前者更能充分说明面 ...
- pip升级报错(权限问题)
今天跟新pip的时候错一个接一个 看到拒绝访问应该是权限的问题,想起安装的时候选择谁可以使用软件(大概是这样的一个选项),选择了“只有我”,选择所有用户应该就不会存在这个问题了,那么怎么解决呢? 敲黑 ...
- SDL 显示汉字
#include "stdafx.h" #pragma comment(lib,"SDL.lib") #pragma comment(lib,"SDL ...
- 新闻网大数据实时分析可视化系统项目——11、MySQL安装
1.修改yum源 鉴于用国外的Yum源,速度比较慢,所以想到将国外的yum源改为国内的Yum源,这里选择使用比较多的阿里云源.具体修改方法可以参考此连接 2.在线安装mysql 通过yum在线mysq ...
- Android 自定义PopWindow完整代码
1.布局文件的编写 <?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:and ...
- RabbitMq学习笔记——MingW编译RabbitMQ C
1.安装cmak,下载地址:https://cmake.org/download/,当前最新版本3.15.1,下载cmake-3.15.1-win64-x64.msi 注意:安装时勾选将bin目录添加 ...
- Mybatis入门(四)配置优化(一)
这一章主要实验Mybatis的引入外部配置文件,属性(properties)这个属性都是可外部配置且可动态替换的,既可以在典型的 Java 属性文件中配置,亦可通过 properties 元素的子元素 ...
- 前端学习笔记系列一:7 在vscode中根据vue等模板生成代码
目标:希望每次新建.vue文件后,VSCODE能够根据配置,自动生成我们想要的内容. 方法:打开VSCODE编辑器,依次选择“文件 -> 首选项 -> 用户代码片段”,此时,会弹出一个搜索 ...
- Vue + Webpack 根据不同环境打包
修改 prod.env.js // 当前正在运行的脚本名称 const TARGET = process.env.npm_lifecycle_event // 第一个参数 let argv = pro ...