国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 php教程 PHP開發(fā) 工廠模式在Zend Framework應(yīng)用介紹

工廠模式在Zend Framework應(yīng)用介紹

Jan 05, 2017 am 10:00 AM

首先我們先引用一些概念:?
工廠模式:專門定義一個類別來負責創(chuàng)建其他類別的實例,而創(chuàng)建的實例通常都具有其同的父類別。工廠模式屬於類別的創(chuàng)建模式,通常根據(jù)自變數(shù)的不同返回不同類別的實例。?
工廠模式的實質(zhì)是由一個工廠類別根據(jù)傳入的參量,動態(tài)決定應(yīng)該創(chuàng)造哪一個產(chǎn)品的實例。工廠模式式涉及工廠角色、抽象產(chǎn)品角色和具體產(chǎn)品角色。?
工廠(Creator)角色:是工廠模式的核心,它負責實現(xiàn)創(chuàng)造所有實例的內(nèi)部邏。工廠類別可以被外界直接調(diào)用,創(chuàng)建所需產(chǎn)品物件。?
抽象產(chǎn)品(Product)角色:是工廠模式所建立所有物件的父類,它負責描述所有實例所共有的公共介面。?
具體產(chǎn)品(Concrete Product)角色:是工廠模式的創(chuàng)建目標,所有的物件都是扮演這個角色的某個特定類別的實例。?
ZF中的zend_db就是工廠模式的一個很好的例子。?
接下來就開始進行分析。 。 。 。 。 。?
設(shè)定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的建構(gòu)子就會被呼叫。?
在建構(gòu)函式中,透過Zend_Db::factory()我們就能得到一個操作資料庫的物件實例。
透過一個Zend_Config_Ini 實例讀取config.ini中相關(guān)資訊作為參數(shù)傳遞給工廠函數(shù)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(),如果我們使用傳統(tǒng)的方式,該怎麼操作?

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

$db=new Zend_Db_Adapter_Pdo_Mysql($config)?

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

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

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

Zf中如何是如何實現(xiàn)工廠模式的呢??

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

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

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 
{ 
//...實現(xiàn)針對Mysql數(shù)據(jù)庫的操作 
} 
class Zend_Db_Adapter_Pdo_Mssql extends Zend_Db_Adapter_Pdo_Abstract 
{ 
//....實現(xiàn)針對Mssql數(shù)據(jù)庫的操作 
} 
class Zend_Db_Adapter_Pdo_Sqlite extends Zend_Db_Adapter_Pdo_Abstract 
{ 
//....實現(xiàn)針對Sqlite數(shù)據(jù)庫的操作 
}
以上關(guān)係可以用一張圖簡單的表示出來?

??接下來,我們跟蹤下Zend_Db::Factory()到底是實現(xiàn)根據(jù)不同的參數(shù)選擇不同的資料庫的。?????更多工廠模式在Zend Framework應(yīng)用介紹相關(guān)文章請關(guān)注PHP中文網(wǎng)! ??
本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔相應(yīng)的法律責任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

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