《PHP實(shí)例:PHP經(jīng)典面試題之設(shè)計(jì)模式(經(jīng)常遇到)》要點(diǎn):
本文介紹了PHP實(shí)例:PHP經(jīng)典面試題之設(shè)計(jì)模式(經(jīng)常遇到),希望對(duì)您有用。如果有疑問(wèn),可以聯(lián)系我們。
PHP學(xué)習(xí)設(shè)計(jì)模式在面試過(guò)程中經(jīng)常會(huì)提到,有時(shí)候還會(huì)讓我們舉例說(shuō)明各種設(shè)計(jì)模式的應(yīng)用場(chǎng)景.
PHP學(xué)習(xí)使用設(shè)計(jì)模式可以減輕我們的工作量,優(yōu)化我們的代碼.
PHP學(xué)習(xí)設(shè)計(jì)模式非常的多,這里介紹單例模式,工廠模式,組合模式,策略模式4種模式
PHP學(xué)習(xí)如果有代碼有什么問(wèn)題或者有更好的方式請(qǐng)告知,謝謝!!!!!
PHP學(xué)習(xí)
/**
* 單例模式
* @author YangYang <1812271619@qq.com>
* 可以想成在一次http哀求中只產(chǎn)生該類的一個(gè)對(duì)象(即只new classname一次)
* 經(jīng)典的例子是數(shù)據(jù)庫(kù)連接(redis,mongodb,memcache等)
* 在一次http哀求中我們可能需要對(duì)數(shù)據(jù)庫(kù)做增刪改查多條sql操作
* 但是如果一次http哀求中每執(zhí)行一條sql我們就mysql_connect(),很明顯會(huì)導(dǎo)致服務(wù)器資源的浪費(fèi)
* 為了節(jié)約資源,就可以通過(guò)單例模式來(lái)實(shí)現(xiàn)一次http哀求只做一次mysql_connect()
* 即將mysql_connect()放在類方法的__construct中,并將__construct方法做成私有,
* 這樣只能通過(guò)getInstance()方法來(lái)獲得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ù)庫(kù)操作,而是建議通過(guò)PDO進(jìn)行數(shù)據(jù)庫(kù)操作,所以這里寫(xiě)一個(gè)簡(jiǎn)易PDO連接的單例模式
* 這里只是講解單例原理,數(shù)據(jù)庫(kù)的防sql注入等問(wèn)題不做考慮
* 準(zhǔn)備工作 數(shù)據(jù)庫(kù):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)用,但仍然是同一個(gè)pdo對(duì)象
print_r($result);
歡迎參與《PHP實(shí)例:PHP經(jīng)典面試題之設(shè)計(jì)模式(經(jīng)常遇到)》討論,分享您的想法,維易PHP學(xué)院為您提供專業(yè)教程。
轉(zhuǎn)載請(qǐng)注明本頁(yè)網(wǎng)址:
http://www.snjht.com/jiaocheng/8585.html