欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

[PHP] 使用反射实现的控制反转

程序员文章站 2022-04-28 14:38:04
搬家进程中反射实现控制反转,样做的好处是可以通过配置项动态的控制下面那个类的属性 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);

各个属性正确赋值:

[PHP] 使用反射实现的控制反转