下面是工厂的另一种变化,你静态地调用了一个工厂类:
classProduct{
functiongetList(){
$db=&DbConnectionBroker::getConnection();
//...
}
}
classDbConnectionBroker{
function&getConnection(){
returnnewMysqlConnection(DB_USER,DB_PW,DB_NAME);
}
}
这里DbConnectionBroker::getConnection()产生的效果和前面的一样,但这样却很有好处:我们不必在每个需要连接数据库的类中加入调用newMysqlConnection(DB_USER
,DB_PW,DB_NAME)的方法
。 当然另一种变化就是引用一个外部工厂对象的资源
,和这个对象定义了数据库连接的参数:
classProduct{
var$_db_maker;
functionsetDbFactory(&$connection_factory){
$this->_db_maker=&$connection_factory;
}
functiongetList(){
$db=&$this->_db_maker->getConnection();
//...
}
}
最后,一个工厂可以用一个函数合理的组织,然后实现:
function&make_db_conn(){
returnnewMysqlConnection(DB_USER,DB_PW,DB_NAME);
}
classProduct{
functiongetList(){
$bar=&make_db_conn();
//...
}
}