我是否在调用我继承的抽象类的基类中得到此?
class ConcreteClass extends MyAbstractClass(){
public function __construct(){
parent::__construct(); //or other method that returns my adapter, PDO in this case.
}
}
或者,是否在创建的每个对象引用上获得新的适配器:
class ConcreteClass extends BaseClass(){ //or no class extension for that matter
public function __construct(){
public function __construct(DB $adapter) { //or call DB on another class for DI via set/get
$this->adapter = $adapter;
$this->adapter->connect();
}
}
}
我将在创建每个对象的同时创建与数据库的新连接。这不好吗?除了单例(我不想使用)以外,我不知道另一种方法。
http请求->控制器->最终,我得到了我的对象,该对象每次创建对象时都会调用数据库new连接。
我已经创建了“ DB”类型的接口或抽象类,因此即使我已经在使用PDO,也可以根据需要更改数据源。
您可以查看Laravel框架如何解决此问题-参见https://github.com/illuminate/database/blob/master/DatabaseManager.php。该DatabaseManager对象的AFAIK单个实例存储在Laravel ioc容器中。
“ 我将通过创建的每个对象来创建与数据库的新连接。这不好吗?”-它取决于:
还有恕我直言,如果您需要用PHP换出数据源,那么您已经搞砸了。 PDO是PHP必须提供的最好的工具,它一点也不好-它只为您提供持久的PHP API,您仍然需要手动转换所有供应商特定的SQL。
您可以拥有db.php。