博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP 反射API
阅读量:5225 次
发布时间:2019-06-14

本文共 1850 字,大约阅读时间需要 6 分钟。

在框架中,反射用的比较多,是一种比较灵活的统一实例化类,规范化接口,用起来很方便,废话不多说,直接上代码,例子看懂基本就会用php的反射了,主要部分已添加注释;不明白的可以留言给我。

interface module{    function execute();}class ftpModule implements module{    function setHost($host){        print "ftpModule::setHost():$host\n";    }    function setUser($user){        print "ftpModule::setUser():$user\n";    }    function execute()    {            }}class moduleRun{    private $configData=array(        'ftpModule'=>array('host'=>'www.ceshi.com','user'=>'bob'),    );    private $modules = array();//缓存对象    function init(){        $interface = new ReflectionClass('Module');        foreach($this->configData as $modulename=>$params){            $module_class = new ReflectionClass($modulename);            if( ! $module_class->isSubclassOf($interface)){                throw new Exception("unknow module type");            }            $module = $module_class->newInstance();//创建module示例            foreach ($module_class->getMethods() as $method){                $this->handleMethod($module,$method,$params);            }            array_push($this->modules,$module);//缓存对象        }        return $this->modules;    }    function handleMethod(Module $module,ReflectionMethod $method,$params){        $name =$method->getName();        $args = $method->getParameters();        if(count($args) != 1 || substr($name,0,3) != 'set'){            return false;        }        $property = strtolower(substr($name,3));        if(! isset($params[$property])){            return false;        }        $arg_class =$args[0]->getClass();        if(empty($arg_class)){            $method->invoke($module,$params[$property]);//调用set方法        }else{            $method->invoke($module,$arg_class->newInstance($params[$property]));        }    }}$moduleRun = new moduleRun();$moduleRun->init();

 

转载于:https://www.cnblogs.com/happy-dream/p/6610145.html

你可能感兴趣的文章
3、Python-字符串
查看>>
Codeforces Round #316 (Div. 2) D
查看>>
算法训练 P0505
查看>>
CHttpFile调试
查看>>
使用sql生成UUID
查看>>
一、Redis的安装与启动
查看>>
Xamarin.Android 使用 SQLite 出现 Couldn't read row 0, col -1 from CursorWindow. 异常
查看>>
Linux使用Public Key方式远程登录
查看>>
权重结构的加权排序算法
查看>>
【原创】Microsoft SQL Server 2005技术内幕:T-SQ程序设计 学习笔记
查看>>
个人声明
查看>>
配置apache可以运行html文件,zendeOptimizer安装
查看>>
[软件工程基础]第 2 次个人作业
查看>>
power的读音
查看>>
初试Java(第一次学习java,多多指教!!!)
查看>>
潭州课堂25班:Ph201805201 tornado 项目 第五课 增加用户系统-用户中心(课堂笔记)...
查看>>
sort 命令详解
查看>>
centos下开启htaccess
查看>>
Mysql & Hive 导入导出数据
查看>>
笔记二 air android处理用户交互
查看>>