《PHP實例:PHP經(jīng)典面試題之設計模式(經(jīng)常遇到)》要點:
本文介紹了PHP實例:PHP經(jīng)典面試題之設計模式(經(jīng)常遇到),希望對您有用。如果有疑問,可以聯(lián)系我們。
PHP學習設計模式在面試過程中經(jīng)常會提到,有時候還會讓我們舉例說明各種設計模式的應用場景.
PHP學習使用設計模式可以減輕我們的工作量,優(yōu)化我們的代碼.
PHP學習設計模式非常的多,這里介紹單例模式,工廠模式,組合模式,策略模式4種模式
PHP學習如果有代碼有什么問題或者有更好的方式請告知,謝謝!!!!!
PHP學習
/**
* 單例模式
* @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(),很明顯會導致服務器資源的浪費
* 為了節(jié)約資源,就可以通過單例模式來實現(xiàn)一次http哀求只做一次mysql_connect()
* 即將mysql_connect()放在類方法的__construct中,并將__construct方法做成私有,
* 這樣只能通過getInstance()方法來獲得mysql_connect()的資源連接符
* getInstance()方法中判斷是否已經(jīng)存在myql連接符,如果存在就直接返回該連接符
* 否則new classname()即調(diào)用了__construct方法執(zhí)行了mysql_connect()得到了資源連接符,并返回連接符
* 因為現(xiàn)在PHP已不再建議直接使用mysql函數(shù)進行數(shù)據(jù)庫操作,而是建議通過PDO進行數(shù)據(jù)庫操作,所以這里寫一個簡易PDO連接的單例模式
* 這里只是講解單例原理,數(shù)據(jù)庫的防sql注入等問題不做考慮
* 準備工作 數(shù)據(jù)庫:test 數(shù)據(jù)表:user 字段:id name 記錄:1 CodeAnti
* 最終運行結(jié)果: 數(shù)據(jù)表user中id=1這條記錄被刪除
*/
class SinglePDO
{
private static $_instance = null;
private $_pdo;
//私有,防止外部直接實例化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(){}
//獲取連接實例
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);
歡迎參與《PHP實例:PHP經(jīng)典面試題之設計模式(經(jīng)常遇到)》討論,分享您的想法,維易PHP學院為您提供專業(yè)教程。
轉(zhuǎn)載請注明本頁網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/8585.html