辛星php视频教程,跟着辛星用PHP的反射机制来实现插件

我的博文的前一篇解说了PHP的反射机制是怎么回事,假设读者还不清楚反射机制,能够搜索下或者看我的博文,都是不错的选择。我们開始解说一下怎么用PHP来实现插件机制。所谓插件机制。就是我们定义一个接口。即我们定义一个interface,然后第三方插件就去实现这个interface,然后我们拿到了这个插件之后,去调用这个插件的功能,我们能够不知道这些插件的类名等信息,我们接下来就用反射机制去实现这个功能。

因为我仅仅是简单的演示样例。所以我写的代码并不长,并且非常easy,所以,大家既然理解了上面的步骤,那么就能够直接看源码了,当中的凝视还是蛮清楚的。假设读者有什么不清楚的,能够告诉我,我会认真回复的。

php

/**

*我们定义好一个接口。叫做Ixin

*/

interface Ixin{

function msg();

}

/**

*某热心开发者给我们写了一个插件类

*/

class Xin implements Ixin{

function msg(){

echo "辛星你好";

}

}

/**

*我们先搜索该插件类。而且推断它是否实现了msg方法

*/

function find(){

//定义描写叙述插件的数组

$plugin = array();

foreach (get_declared_classes() as $class) {

//实例化反射类的类

$reclass = new ReflectionClass($class);

//推断它是否实现了接口Ixin

if($reclass->implementsInterface('Ixin')){

$plugin[] = $reclass;

}

}

return $plugin;

}

/**

*我们去调用该插件的msg方法

*/

function myexec(){

$arr = find();

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);

}

}

}

}

/**

*我们仅仅须要调用这一个函数就能够了

*它自己主动搜索全部的插件,而且运行插件的msg函数

*/

myexec();

我还是分析一下吧,接口Ixin是我们定义的接口。而类Xin是第三方的插件,我们用find自己主动搜索了全部定义的类,然后我们推断这些类里面谁继承自Ixin,而且实现了msg方法,我们拿到了这个列表自后,就能够用myexec方法去调用它们了。

思路清晰吗?清晰请打1.。

。。O(∩_∩)O~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值