22222222

<?php
//原始代码
class MyDB{
    private $db;
    public function __construct($connInfo)
    {
    }
    public function queryForRows($sql){
        return ['user_id'=>101,"user_name"=>"shenyi"];
    }
}

class MyUser{ //MyUser 对 MyDB做正向控制
    private $mydb;
    public function __construct($dsn)
    {
        $this->mydb=new MyDB($dsn); //主动实例化DB
    }
    public function getAllUser(){ //业务方法
        return $this->mydb->queryForRows("select * from users");
    }
}

//$user=new MyUser("mysql:host=localhost");
//var_dump($user->getAllUser());

//我们把MyUser和数据库  两个概念 混淆在了一起,变成了一个。
//当数据库密码或其他信息变掉了,我们就要修改MyUser的构造函数。造成模块耦合
//    事实上,MyUser就应该专注于业务处理,Db就应该是独立的



//IoC容器框架
/
class ClassFactory{
    private static $container=[];
    public static function set(string $name,callable $func){
        self::$container[$name]=$func;
    }
    public static function get(string $name){
        if(isset(self::$container[$name])){
            return (self::$container[$name])();
        }
        return null;
    }
}
ClassFactory::set('mydb',function (){
   return new MyDB('xxxxxxxxxxx');
});
ClassFactory::set('myuser',function (){
    return new MyUser(ClassFactory::get('mydb'));
});
/

//业务代码
$myuser=ClassFactory::get('myuser');
var_dump($myuser->getAllUser());

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值