以前在
dbconfig.php
寫PDO
連接數(shù)據(jù)庫操作溶锭,用$db = new pdo()
,然后model
層其他文件include_once('dbconfig.php')
就可以使用PDO
實(shí)例對象$db
的各種方法和異常處理類了虱颗。
其實(shí)呢晶伦,目前我完全理解的看而芥,這樣之前存在兩個(gè)大問題。第一耕姊,代碼停留在
php4
面向過程的水平桶唐,不是把操作寫到一個(gè)文件或者函數(shù)去調(diào)用就叫面向?qū)ο螅。茉兰。尤泽。∵@一點(diǎn)我現(xiàn)在特別感謝魏振華老師邦邦,一學(xué)期她教的幾乎都是純理念的C++面相過程安吁,回想起來講的非常好,特別有用燃辖。第二個(gè)問題就是鬼店,每次
include
都會(huì)new
一個(gè)PDO
對象,由于這種蹩腳的代碼沒加命名空間黔龟,即使每次實(shí)例化對象賦值給同樣的變量名也可以使用妇智。但重點(diǎn)在于滥玷,每次開辟空間對內(nèi)存I/O
讀寫影響很大,于是就有了一次結(jié)婚巍棱,終生幸福的設(shè)計(jì)模式:這里稍微說工廠模式和單例模式惑畴,請盡量保證你理解面向?qū)ο笳Z言特性(這里的設(shè)計(jì)模式并不是針對php!:结恪如贷!)。
剛才那個(gè)例子到踏,不同文件里每次你要操作數(shù)據(jù)庫杠袱,都要實(shí)例化一個(gè)對象,很惡心窝稿。就像每次開房都要省下幾百塊吃飯和打游戲的錢楣富,我們也可以想辦法去網(wǎng)吧去
KTV
玩玩嘛。一般我們是每次需要操作數(shù)據(jù)庫就連接伴榔,工廠模式就是每次先引入配置好的dbconfig.php
纹蝴,不管你是啥后臺(tái)文件,反正model
層你基本都要和數(shù)據(jù)庫搞關(guān)系踪少,我全部都引進(jìn)來再說塘安。這樣可以少寫一點(diǎn)代碼,暑假有人告訴我這就是封裝代碼到一個(gè)文件秉馏。我信了耙旦,確實(shí)這是封裝脱羡,鏡像自制還能叫封裝呢B芫俊!锉罐!這個(gè)封裝和面向?qū)ο蟮姆庋b性其實(shí)并不是一個(gè)概念帆竹!起碼
dbconfig.php
這破文件誰都能訪問就不符合。然后為了防止I/O
開銷脓规,我們引入了單例模式栽连,這又是啥意思?舉個(gè)例子吧侨舆,作為單身汪的你每周都要發(fā)泄一下秒紧,有時(shí)候去某店發(fā)泄,有時(shí)候你去網(wǎng)吧發(fā)泄挨下,有時(shí)候去
KTV
發(fā)泄熔恢,都要錢都很貴啊臭笆!然后你就學(xué)會(huì)了一卡通叙淌,學(xué)校所有地方都允許你發(fā)泄秤掌,學(xué)校借給你一些東西的使用權(quán),你還得還回去鹰霍,并且你每次都要走同一條路去發(fā)泄了闻鉴,這就是單例模式:創(chuàng)建一個(gè)唯一單例入口,有請求過來就判斷單例對象是否存在茂洒,存在就返回孟岛,不存在則創(chuàng)建。創(chuàng)建是個(gè)實(shí)例化的過程督勺,內(nèi)存開銷比較大蚀苛,但是如果一次創(chuàng)建后讓這個(gè)對象停留在靜態(tài)存儲(chǔ)區(qū)static
的話,后續(xù)就可以直接獲取玷氏。
在代碼上理解會(huì)更方便些:
configdb.php
文件里堵未,BD class
里面有構(gòu)造函數(shù),保護(hù)屬性$db
盏触,還有個(gè)私有方法connectDB()
渗蟹,里面實(shí)現(xiàn)了new PDO
操作,return $db
,但是在類外是不能直接調(diào)用私有方法滴赞辩,怎么破呢雌芽?魏老師的學(xué)生絕對能回答出來,這個(gè)做法就是單例模式辨嗽,能看到這里的世落,請回答一下:(答案就是兩個(gè)單詞,共六個(gè)字母)糟需。
- get and set屉佳。