首頁 >php教程 >PHP开发 >工廠模式在Zend Framework應用介紹

工廠模式在Zend Framework應用介紹

高洛峰
高洛峰原創
2017-01-05 10:00:011111瀏覽

首先我們先引用一些概念: 
工廠模式:專門定義一個類別來負責創建其他類別的實例,而創建的實例通常都具有其同的父類別。工廠模式屬於類別的創建模式,通常根據自變數的不同返回不同類別的實例。 
工廠模式的實質是由一個工廠類別根據傳入的參量,動態決定應該創造哪一個產品的實例。工廠模式式涉及工廠角色、抽象產品角色和具體產品角色。 
工廠(Creator)角色:是工廠模式的核心,它負責實現創造所有實例的內部邏。工廠類別可以被外界直接調用,創建所需產品物件。 
抽象產品(Product)角色:是工廠模式所建立所有物件的父類,它負責描述所有實例所共有的公共介面。 
具體產品(Concrete Product)角色:是工廠模式的創建目標,所有的物件都是扮演這個角色的某個特定類別的實例。 
ZF中的zend_db就是工廠模式的一個很好的例子。 
接下來就開始進行分析。 。 。 。 。 。 
設定zf的時候,我們可以將資料庫的連線操作資訊放在Bootstrap.php檔案中 

<?php 
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap 
{ 
function __construct($app){ 
parent::__construct($app); 
$url=constant(&#39;APPLICATION_PATH&#39;).DIRECTORY_SEPARATOR.&#39;configs&#39;.DIRECTORY_SEPARATOR.&#39;config.ini&#39;; 
$dbconfig=new Zend_Config_Ini($url,null,true); 
$db=Zend_Db::factory($dbconfig->general->db->adapter,$dbconfig->general->db->params->toArray()); 
// var_dump($db); 
$db->query(&#39;SET NAMES UTF8&#39;); 
Zend_Db_Table::setDefaultAdapter($db); 
} 
} 
?>

在入口檔案處,透過一個Zend_Application物件來呼叫bootstrap(),類別Bootstrap的建構子就會被呼叫。 
在建構函式中,透過Zend_Db::factory()我們就能得到一個操作資料庫的物件實例。
透過一個Zend_Config_Ini 實例讀取config.ini中相關資訊作為參數傳遞給工廠函數Zend_Db::factory() 
config.ini 的資訊 
[general] 
db.adapter =PDO_MY 
[general] 
db.adapter =PDO_MY 
[general] 
db.adapter =PDO_MY 
[general] 
db.adapter =PDO_MY 
[geneampms. db.params.username =root 
db.params.password = 
db.params.dbname = 資料庫名稱 
Zend_Db::factory() 
表示連接資料庫的信息,包括伺服器名,用戶名,密碼,要連接的資料庫 

先拋出兩個提個問題: 
①如果我們要操作的資料庫是MSSQL,該怎麼操作 
②這裡我們使用的是Zend_Db::factory(),如果我們使用傳統的方式,該怎麼操作 

解答: 
① 我們只需要在config.ini檔案中將PDO_MYSQL修改成PDO_MSSQL即可 
② 傳統方式建立一個作業資料庫的物件實例: 

$db=new Zend_Db_Adapter_Pdo_Mysql($config) 

其中:$config訊息從config.ini讀取 
問題來了:我們使用傳統的方式來建立一個物件實例的話,我們必然有一個流程來判斷當前要操作的資料庫類型吧?
例如: 

switch ($dbType){ 
case &#39;PDO_MYSQL&#39;: 
.... 
case &#39;PDO_MSSQL&#39;: 
.... 
case &#39;PDO_SQLITE&#39;: 
.... 
}

我們還得根據不同的資料庫類型,寫不同的作業資料庫的語句,這樣豈不是很麻煩 
但是,這一切的一切,zf透過工廠模式都已經幫我們做好了,使用起來非常方便 

Zf中如何是如何實現工廠模式的呢? 

首先,得有一個抽象基底類別:Zend_Db_Adapter_Abstract,該類別是工廠模式所建立的所有物件的父類,他負責提供所有實例要所共有的介面。

該類別不僅提供了一些我們非常熟悉操作資料庫的實現方法,例如:select,update,insert,delete,query,fetchRow,fetchAssoc;另外,也提供了一些接口,用以在子類別中進行實現,例如:limit,getServerVersion,closeConnection,describeTable等等 工厂模式在Zend Framework中应用介绍

abstract class Zend_Db_Adapter_Abstract 
{ 
//.. 
} 
abstract class Zend_Db_Adapter_Pdo_Abstract extends Zend_Db_Adapter_Abstract 
{ 
//.. 
} 
class Zend_Db_Adapter_Pdo_Mysql extends Zend_Db_Adapter_Pdo_Abstract 
{ 
//...实现针对Mysql数据库的操作 
} 
class Zend_Db_Adapter_Pdo_Mssql extends Zend_Db_Adapter_Pdo_Abstract 
{ 
//....实现针对Mssql数据库的操作 
} 
class Zend_Db_Adapter_Pdo_Sqlite extends Zend_Db_Adapter_Pdo_Abstract 
{ 
//....实现针对Sqlite数据库的操作 
}

以上關係可以用一張圖簡單的表示出來 

🎜接下來,我們跟踪下Zend_Db::Factory()到底是實現根據不同的參數選擇不同的資料庫的。 🎜🎜更多工廠模式在Zend Framework應用介紹相關文章請關注PHP中文網! 🎜
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn