跟着辛星用PHP的反射机制来实现插件

php中文网
发布: 2016-06-23 13:53:14
原创
956人浏览过

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

      由于我只是简单的示例,所以我写的代码并不长,而且很简单,所以,大家既然理解了上面的步骤,那么就可以直接看源代码了,其中的注释还是蛮清楚的,如果读者有什么不清楚的,可以告诉我,我会认真回复的。

来画数字人直播
来画数字人直播

来画数字人自动化直播,无需请真人主播,即可实现24小时直播,无缝衔接各大直播平台。

来画数字人直播 0
查看详情 来画数字人直播
<?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~

立即学习PHP免费学习笔记(深入)”;

相关标签:
php
PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号