<?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());