首先我們先引用一些概念:
工廠模式:專門定義一個類別來負責創建其他類別的實例,而創建的實例通常都具有其同的父類別。工廠模式屬於類別的創建模式,通常根據自變數的不同返回不同類別的實例。
工廠模式的實質是由一個工廠類別根據傳入的參量,動態決定應該創造哪一個產品的實例。工廠模式式涉及工廠角色、抽象產品角色和具體產品角色。
工廠(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('APPLICATION_PATH').DIRECTORY_SEPARATOR.'configs'.DIRECTORY_SEPARATOR.'config.ini'; $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('SET NAMES UTF8'); 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即可
② 傳統方式建立一個作業資料庫的物件實例:
其中:$config訊息從config.ini讀取
問題來了:我們使用傳統的方式來建立一個物件實例的話,我們必然有一個流程來判斷當前要操作的資料庫類型吧?
例如:
switch ($dbType){ case 'PDO_MYSQL': .... case 'PDO_MSSQL': .... case 'PDO_SQLITE': .... }
我們還得根據不同的資料庫類型,寫不同的作業資料庫的語句,這樣豈不是很麻煩
但是,這一切的一切,zf透過工廠模式都已經幫我們做好了,使用起來非常方便
Zf中如何是如何實現工廠模式的呢?
首先,得有一個抽象基底類別:Zend_Db_Adapter_Abstract,該類別是工廠模式所建立的所有物件的父類,他負責提供所有實例要所共有的介面。該類別不僅提供了一些我們非常熟悉操作資料庫的實現方法,例如:select,update,insert,delete,query,fetchRow,fetchAssoc;另外,也提供了一些接口,用以在子類別中進行實現,例如:limit,getServerVersion,closeConnection,describeTable等等
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中文網! 🎜

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

Dreamweaver CS6
視覺化網頁開發工具

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

SublimeText3漢化版
中文版,非常好用