PHP經(jīng)典面試題之設(shè)計(jì)模式(經(jīng)常遇到)
設(shè)計(jì)模式在面試過程中經(jīng)常會提到,有時候還會讓我們舉例說明各種設(shè)計(jì)模式的應(yīng)用場景。
使用設(shè)計(jì)模式可以減輕我們的工作量,優(yōu)化我們的代碼。
設(shè)計(jì)模式非常的多,這里介紹單例模式,工廠模式,組合模式,策略模式4種模式
如果有代碼有什么問題或者有更好的方式請告知,謝謝!!!!!
/** * 單例模式 * @author YangYang <1812271619@qq.com> * 可以想成在一次http請求中只產(chǎn)生該類的一個對象(即只new classname一次) * 經(jīng)典的例子是數(shù)據(jù)庫連接(redis,mongodb,memcache等) * 在一次http請求中我們可能需要對數(shù)據(jù)庫做增刪改查多條sql操作 * 但是如果一次http請求中每執(zhí)行一條sql我們就mysql_connect(),很明顯會導(dǎo)致服務(wù)器資源的浪費(fèi) * 為了節(jié)約資源,就可以通過單例模式來實(shí)現(xiàn)一次http請求只做一次mysql_connect() * 即將mysql_connect()放在類方法的__construct中,并將__construct方法做成私有, * 這樣只能通過getInstance()方法來獲得mysql_connect()的資源連接符 * getInstance()方法中判斷是否已經(jīng)存在myql連接符,如果存在就直接返回該連接符 * 否則new classname()即調(diào)用了__construct方法執(zhí)行了mysql_connect()得到了資源連接符,并返回連接符 * 因?yàn)楝F(xiàn)在PHP已不再建議直接使用mysql函數(shù)進(jìn)行數(shù)據(jù)庫操作,而是建議通過PDO進(jìn)行數(shù)據(jù)庫操作,所以這里寫一個簡易PDO連接的單例模式 * 這里只是講解單例原理,數(shù)據(jù)庫的防sql注入等問題不做考慮 * 準(zhǔn)備工作 數(shù)據(jù)庫:test 數(shù)據(jù)表:user 字段:id name 記錄:1 CodeAnti * 最終運(yùn)行結(jié)果: 數(shù)據(jù)表user中id=1這條記錄被刪除 */ class SinglePDO { private static $_instance = null; private $_pdo; //私有,防止外部直接實(shí)例化new SinglePDO(...) private function __construct($dsn,$dbUser,$dbPassword) { try{ $this->_pdo = new PDO($dsn,$dbUser,$dbPassword); $this->_pdo->exec('set names utf8'); }catch(PDOException $e){ die("Error:{$e->getMessage()}"); } } //私有,防止克隆 private function __clone(){} //獲取連接實(shí)例 public static function getInstance($dsn,$dbUser,$dbPassword) { if(self::$_instance === null) self::$_instance = new self($dsn,$dbUser,$dbPassword); return self::$_instance; } //執(zhí)行sql public function execSql($sql) { $result = $this->_pdo->exec($sql); return $result; } } $dsn = "mysql:host=localhost;dbname=test"; $dbUser = "root"; $dbPassword = ""; $sql = "delete from user where id = 1"; $pdo = SinglePDO::getInstance($dsn,$dbUser,$dbPassword); $result = $pdo->execSql($sql); //$pdo->execSql($sql)多次調(diào)用,但仍然是同一個pdo對象 print_r($result);
相關(guān)文章
jQuery Mobile + PHP實(shí)現(xiàn)文件上傳
這篇文章主要介紹了jQuery Mobile + PHP實(shí)現(xiàn)文件上傳的方法實(shí)例,以及由于自己疏忽造成的問題的解決方法,這里推薦給大家,有需要的小伙伴參考下2014-12-12Yii2框架實(shí)現(xiàn)利用mpdf創(chuàng)建pdf文件功能示例
這篇文章主要介紹了Yii2框架實(shí)現(xiàn)利用mpdf創(chuàng)建pdf文件功能,結(jié)合實(shí)例形式分析了mpdf的下載、安裝及結(jié)合Yii2框架創(chuàng)建pdf文件的相關(guān)操作技巧,需要的朋友可以參考下2019-02-02Laravel5.1 框架模型一對一關(guān)系實(shí)現(xiàn)與使用方法實(shí)例分析
這篇文章主要介紹了Laravel5.1 框架模型一對一關(guān)系實(shí)現(xiàn)與使用方法,結(jié)合實(shí)例形式分析了laravel5.1框架模型一對一關(guān)系的原理、定義與使用方法,需要的朋友可以參考下2020-01-01PHPMYADMIN導(dǎo)入數(shù)據(jù)最大為2M的解決方法
PHPMYADMIN還原數(shù)據(jù)庫的時候上傳的最大限制:2,048 KB,數(shù)據(jù)庫稍微大一些就無法處理,要么使用其他的備份還原工具如帝國備份王,要么就分卷導(dǎo)出,那么有沒有辦法還使用PHPMYADMIN來處理呢2012-04-04PHP文件及文件夾操作之創(chuàng)建、刪除、移動、復(fù)制
這篇文章主要介紹了PHP文件及文件夾操作之創(chuàng)建、刪除、移動、復(fù)制的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-07-07純php打造的tab選項(xiàng)卡效果代碼(不用js)
用php實(shí)現(xiàn)的tab選項(xiàng)卡效果,根據(jù)get判斷,獲取get生成css與對應(yīng)的內(nèi)容,當(dāng)然效率肯定沒有靜態(tài)的好,這里給出的思路與方法。2010-12-12