内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

如何在PHP項目中安全的實現(xiàn)一個單例模式-創(chuàng)新互聯(lián)

本篇文章給大家分享的是有關(guān)如何在PHP項目中安全的實現(xiàn)一個單例模式,小編覺得挺實用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

成都創(chuàng)新互聯(lián)公司是一家專業(yè)從事網(wǎng)站設(shè)計、成都網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司。作為專業(yè)網(wǎng)絡(luò)公司,成都創(chuàng)新互聯(lián)公司依托的技術(shù)實力、以及多年的網(wǎng)站運營經(jīng)驗,為您提供專業(yè)的成都網(wǎng)站建設(shè)、網(wǎng)絡(luò)營銷推廣及網(wǎng)站設(shè)計開發(fā)服務(wù)!

代碼如下:



class A
{
    protected static $_instance = null;
    protected function __construct()
    {
        //disallow new instance
    }
    protected function __clone(){
        //disallow clone
    }
    public function getInstance()
    {
        if (self::$_instance === null) {
            self::$_instance = new self();
        }
        return self::$_instance;
    }
}
class B extends A
{
    protected static $_instance = null;
}

$a = A::getInstance();
$b = B::getInstance();
var_dump($a === $b);
將__construct方法設(shè)為私有,可以保證這個類不被其他人實例化。但這種寫法一個顯而易見的問題是:代碼不能復(fù)用。比如我們在一個一個類繼承A:


復(fù)制代碼 代碼如下:


class B extends A
{
    protected static $_instance = null;
}

$a = A::getInstance();
$b = B::getInstance();
var_dump($a === $b);
上面的代碼會輸出:


復(fù)制代碼 代碼如下:


bool(true)


問題出在self上,self的引用是在類被定義時就決定的,也就是說,繼承了B的A,他的self引用仍然指向A。為了解決這個問題,在PHP 5.3中引入了后期靜態(tài)綁定的特性。簡單說是通過static關(guān)鍵字來訪問靜態(tài)的方法或者變量,與self不同,static的引用是由運行時決定。于是簡單改寫一下我們的代碼,讓單例模式可以復(fù)用。


復(fù)制代碼 代碼如下:

class C
{
    protected static $_instance = null;
    protected function __construct()
    {

    }
    protected function __clone()
    {
        //disallow clone
    }
    public function getInstance()
    {
        if (static::$_instance === null) {
            static::$_instance = new static;
        }
        return static::$_instance;
    }
}
class D extends C
{
    protected static $_instance = null;
}
$c = C::getInstance();
$d = D::getInstance();
var_dump($c === $d);
以上代碼輸出:


復(fù)制代碼 代碼如下:


bool(false)


這樣,簡單的繼承并重新初始化$_instance變量就能實現(xiàn)單例模式。注意上面的方法只有在PHP 5.3中才能使用,對于之前版本的PHP,還是老老實實為每個單例類寫一個getInstance()方法吧。

以上就是如何在PHP項目中安全的實現(xiàn)一個單例模式,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降摹OM隳芡ㄟ^這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

網(wǎng)站名稱:如何在PHP項目中安全的實現(xiàn)一個單例模式-創(chuàng)新互聯(lián)
新聞來源:http://www.rwnh.cn/article46/igeeg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營銷推廣、定制開發(fā)標(biāo)簽優(yōu)化、網(wǎng)站收錄、網(wǎng)站制作、自適應(yīng)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)
华蓥市| 天长市| 阜南县| 垣曲县| 景洪市| 磴口县| 蛟河市| 昌乐县| 巴楚县| 镇平县| 彝良县| 呼和浩特市| 金乡县| 渭南市| 防城港市| 鸡西市| 徐闻县| 定兴县| 松阳县| 浦北县| 龙陵县| 石嘴山市| 甘孜| 库尔勒市| 钟山县| 宁德市| 南汇区| 进贤县| 砚山县| 公安县| 江源县| 西昌市| 阿拉善左旗| 通许县| 文登市| 南昌市| 沾化县| 安丘市| 湾仔区| 贵南县| 宁陕县|