[PHP] 使用反射实现的控制反转
搬家进程中反射实现控制反转,样做的好处是可以通过配置项动态的控制下面那个类的属性
1.$this->getObject($class, $config->getConfig('param'), array($this), $interfaces);
2.$reflection=new ReflectionClass($class);
3.$reflection->implementsInterface($interface)//检测是否实现接口
4.$obj=$reflection->newInstanceArgs()
5.$reflection->hasMethod($method)//检测是否有这个方法
6.$obj->$method($v);
举例:
/*
这样做的好处是可以通过配置项动态的控制下面那个类的属性
*/ //配置项
$conf=array(
'class'=>'User',
'newParams'=>array('name'=>'taoshihan'),
'setParams'=>array(
'score'=>'100fen',
'age'=>'100'
)
);
//业务类
class User {
private $name;
private $age;
private $score;
public function __construct($name){
$this->name=$name;
}
public function setAge($age){
$this->age=$age;
}
public function setScore($score){
$this->score=$score;
}
}
//生成对象
class Application{
private $conf;
public function __construct($conf){
$this->conf=$conf;
}
public function getAction(){
$obj=$this->getObject($this->conf['class'],$this->conf['setParams'],$this->conf['newParams']);
return $obj;
}
public function getObject($class, $setParams = null, $newParams = array()){
if (!$class) {
return null;
}
$reflection = new ReflectionClass($class);
$obj = $reflection->newInstanceArgs($newParams);
if (!empty($setParams)) {
foreach ($setParams as $k => $v) {
$method = 'set' . ucfirst($k);
if ($reflection->hasMethod($method)) {
$obj->$method($v);
}}
}
return $obj;
}
} $app=new Application($conf);
$obj=$app->getAction();
var_dump($obj);
各个属性正确赋值:

[PHP] 使用反射实现的控制反转的更多相关文章
- CLR、程序集、反射和控制反转
以前面试包括自己学习的时候经常会碰到这3个东西,也查过相关介绍,晦涩难懂,虽然看完之后,当时勉强理解,不过过一段时间又忘了.其实这篇文章可以分两篇(clr.程序集)和(反射.控制反转)来写,但它们之间 ...
- C#通过反射实现简单的控制反转和依赖注入(一)
Java项目中通过@Autowire便可以实现将对象实例化到指定的字段,无需手动new一个对象出来,用起来非常方便,因为Java类加载器在在加载过程会将扫描所有@Servie.@Mapper.@Com ...
- 小菜学习设计模式(五)—控制反转(Ioc)
写在前面 设计模式目录: 小菜学习设计模式(一)—模板方法(Template)模式 小菜学习设计模式(二)—单例(Singleton)模式 小菜学习设计模式(三)—工厂方法(Factory Metho ...
- 谈谈php里的IOC控制反转,DI依赖注入
理论 发现问题 在深入细节之前,需要确保我们理解"IOC控制反转"和"DI依赖注入"是什么,能够解决什么问题,这些在维基百科中有非常清晰的说明. 控制反转(In ...
- Java之控制反转和依赖注入
1.简介 依赖注入和控制反转,目的是为了使类与类之间解耦合,提高系统的可扩展性和可维护性,下面通过一个例子来引入这一概念. 2.案例 1)一般情况下的类耦合 Main.java public clas ...
- IoC模式(依赖、依赖倒置、依赖注入、控制反转)
1.依赖 依赖就是有联系,有地方使用到它就是有依赖它,一个系统不可能完全避免依赖.如果你的一个类或者模块在项目中没有用到它,恭喜你,可以从项目中剔除它或者排除它了,因为没有一个地方会依赖它.下面看一个 ...
- 浅析“依赖注入(DI)/控制反转(IOC)”的实现思路
开始学习Spring的时候,对依赖注入(DI)——也叫控制反转(IOC)—— 的理解不是很深刻.随着学习的深入,也逐渐有了自己的认识,在此记录,也希望能帮助其他入门同学更深入地理解Spring.本文不 ...
- DI依赖注入/IOC控制反转
DI依赖注入# 啥都不说,直接上代码 <?php class UserController { private $user; function __construct(UserModel $us ...
- IOC 控制反转模式
1.依赖 依赖就是有联系,有地方使用到它就是有依赖它,一个系统不可能完全避免依赖。如果你的一个类或者模块在项目中没有用到它,恭喜你,可以从项目中剔除它或者排除它了,因为没有一个地方会依赖它。下面看一个 ...
随机推荐
- hadoop中setup,cleanup,run和context讲解
hadoop 执行中的setup run cleanup context的作用1.简介1) setup(),此方法被MapReduce框架仅且执行一次,在执行Map任务前,进行相关变量或者资源的集中初 ...
- Django入门四之数据库相关
1. 数据库设置 在settings.py中配置数据库 我首先使用的是sqlite3,所以配置如下 2. 数据库的数据结构定义 #blog/models.py #定义了一个表(Student),表里两 ...
- 虚拟机中克隆后使用eth0
1.修改主机名 vi /etc/sysconfig/network NETWORKING=yes HOSTNAME=mini1 1.修改ip地址以及udev记录网络规则的脚本 在CentOS中,ude ...
- 第二次作业 单例模式的SessionFactory
一.基础Hibernate环境搭建(参见http://www.cnblogs.com/sangewuxie/p/9004968.html) 二.实体类User及User.hbm.xml配置 1.Use ...
- Python学习 Part5:输入输出
Python学习 Part5:输入输出 1. 格式化输出 三种输出值的方法: 表达式语句 print()函数 使用文件对象的write()方法 两种方式格式化输出: 由自己处理整个字符串,通过使用字符 ...
- 字符串转json以及获取域名的参数
本例将通过location.search来进行字符串拼接成json以及查询域名参数的value console.log(request('id')); function request(obj){ v ...
- 基于 HTML5 WebGL 的低碳工业园区监控系统
前言 低碳工业园区的建设与推广是我国推进工业低碳转型的重要举措,低碳工业园区能源与碳排放管控平台是低碳工业园区建设的关键环节.如何对园区内的企业的能源量进行采集.计量.碳排放核算,如何对能源消耗和碳排 ...
- TCP/IP Http 和Https socket之间的区别
TCP/IP Http 和Https socket之间的区别 TCP/IP是个协议组,它分为网络层,传输层和应用层, 在网络层有IP协议.ICMP协议.ARP协议.RARP协议和BOOTP协议. ...
- js基础进阶--编的实用技巧(一)
我的个人博客:http://www.xiaolongwu.cn 在平时的开发中,编码技巧很重要,会让你少写很多代码,起到事倍功半的效果. 下面总结几种简单的技巧,大家共同学习一下 1. 利用+.-./ ...
- SSM-SpringMVC-26:SpringMVC异常骇级之自定义异常注解版
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 注解的方法实现异常解析,话不多说,直接搞起,和以前一样的习惯,和上篇博客一样的代码放后面,不一样的在前面 案 ...