<?php
	//依赖注入(Dependency injection)也叫控制反转(Inversion of Control)是一种设计模式
	//这种模式用来减少程序间的耦合。
	
	//假设我们有个类,需要用到数据库连接,我们可能这样写
	class UseDataBase{
		protected $adapter;
		public function __construct(){
			$this->adapter=new MySqlAdapter;
		}
		
		public function getList(){
			$this->adapter->query("sql语句");//使用MySslAdapter类中的query方法;
		}
	}
	class MySqlAdapter{};
	
	//我们可以通过依赖注入来重构上面这个例子
	
	class UseDataBase{
		protected $adapter;
		poublic function __construct(MySqlAdapter $adapter){
			$this->adapter=$adapter;
		}
		
		public function getList(){
			$this->adapter->query("sql语句");//使用MySslAdapter类中的query方法;
		}
	}
	class MySqlAdapter{};
	
	//但是,当我们有很多种数据库时,上面的这种方式就达不到要求或者要写很多个usedatabase类
	//所以我们再重构上面的这个例子
	class UseDataBase{
		protected $adapter;
		poublic function __construct(AdapterInterface $adapter){
			$this->adapter=$adapter;
		}
		
		public function getList(){
			$this->adapter->query("sql语句");//使用MySslAdapter类中的query方法;
		}
	}
	interface AdapterInterface{};
	class MySqlAdapter implements AdapterInterface{};
	class MSsqlAdapter implements AdapterInterface{};
	
	//这样的话,当要使用不同的数据库时,我们只需要添加数据库类就够了,usedatabase类则不需要动。
?>