[PHP] 使用反射实现的控制反转
程序员文章站
2022-10-06 16:19:29
搬家进程中反射实现控制反转,样做的好处是可以通过配置项动态的控制下面那个类的属性 1.$this->getObject($class, $config->getConfig('param'), array($this), $interfaces);2.$reflection=new Reflecti ......
搬家进程中反射实现控制反转,样做的好处是可以通过配置项动态的控制下面那个类的属性
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);
各个属性正确赋值:
上一篇: 深入浅出—Redis集群的相关详解
下一篇: AS3 程序延迟执行的方法分享