Php反转控制案例,[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);

各个属性正确赋值:

187fba2b5e9fc5ed3fcde19c0513da53.png

总结

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值