最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PHP經(jīng)典面試題之設(shè)計(jì)模式(經(jīng)常遇到)

 更新時(shí)間:2015年10月15日 14:50:57   投稿:mrr  
php中設(shè)計(jì)模式非常多,但是設(shè)計(jì)模式在php面試題經(jīng)常會(huì)提到,本文主要給大家介紹php經(jīng)典面試題之設(shè)計(jì)模式,需要的朋友一起看看吧

設(shè)計(jì)模式在面試過程中經(jīng)常會(huì)提到,有時(shí)候還會(huì)讓我們舉例說明各種設(shè)計(jì)模式的應(yīng)用場景。

使用設(shè)計(jì)模式可以減輕我們的工作量,優(yōu)化我們的代碼。

設(shè)計(jì)模式非常的多,這里介紹單例模式,工廠模式,組合模式,策略模式4種模式

如果有代碼有什么問題或者有更好的方式請(qǐng)告知,謝謝!!!!!

/**
 * 單例模式
 * @author YangYang <1812271619@qq.com>
 * 可以想成在一次http請(qǐng)求中只產(chǎn)生該類的一個(gè)對(duì)象(即只new classname一次)
 * 經(jīng)典的例子是數(shù)據(jù)庫連接(redis,mongodb,memcache等)
 * 在一次http請(qǐng)求中我們可能需要對(duì)數(shù)據(jù)庫做增刪改查多條sql操作
 * 但是如果一次http請(qǐng)求中每執(zhí)行一條sql我們就mysql_connect(),很明顯會(huì)導(dǎo)致服務(wù)器資源的浪費(fèi)
 * 為了節(jié)約資源,就可以通過單例模式來實(shí)現(xiàn)一次http請(qǐng)求只做一次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ù)庫操作,所以這里寫一個(gè)簡易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)用,但仍然是同一個(gè)pdo對(duì)象
print_r($result);

相關(guān)文章

最新評(píng)論

故城县| 玉山县| 九寨沟县| 舟山市| 碌曲县| 曲沃县| 和硕县| 临洮县| 龙海市| 大名县| 寿宁县| 弥渡县| 保靖县| 平凉市| 桐柏县| 陇川县| 文水县| 南通市| 阳信县| 呼图壁县| 北宁市| 衡阳市| 定结县| 虹口区| 揭东县| 晋中市| 云和县| 汨罗市| 民权县| 海阳市| 永德县| 云林县| 涞水县| 皮山县| 嘉义县| 榕江县| 洛浦县| 临泽县| 绿春县| 汉寿县| 莱州市|