首先我們先引用一些概念:
工廠模式:專門定義一個類別來負責創建其他類別的實例,而創建的實例通常都具有其同的父類別。工廠模式屬於類別的創建模式,通常根據自變數的不同返回不同類別的實例。
工廠模式的實質是由一個工廠類別根據傳入的參量,動態決定應該創造哪一個產品的實例。工廠模式式涉及工廠角色、抽象產品角色和具體產品角色。
工廠(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脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

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

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

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中