PHP實現單例

  1. 申請一個私有的靜態成員變量來保存該類的唯一實例
  2. 聲明私有的構造方法,防止類外部創建對象
  3. 聲明一個靜態公共方法,供外部獲取唯一實例

這三步走完,就是一個單例了,但是這個單例是不安全的,想要這個單例安全,還需以下兩步(如有不完善還請補充)

  1. 聲明私有的克隆方法,防止對象被克隆
  2. 重寫__sleep方法,將返回置空,防止序列化反序列化獲得新的對象
<?php
/**
 * 單列模式(防止對象克隆、對象序列化反序列化)
 * Created by PhpStorm.
 * User: Jeaforea
 * Date: 2019/3/14
 * Time: 17:56
 */

namespace Kanshenmekan\Buzhunkan\Zaikandasini;

class SetSingleton{

    private static $new; //申請一個私有的靜態成員變量來保存該類的唯一實例

    private function __construct() {} //聲明私有的構造方法,防止類外部創建對象

    public static function instance () { //聲明一個靜態公共方法,供外部獲取唯一實例
        if (!(self::$new instanceof self)) {
            self::$new = new self;
        }
        return self::$new;
    }

    private function __clone() {} //聲明私有的克隆方法,防止對象被克隆

    public function __sleep() { //重寫__sleep方法,將返回置空,防止序列化反序列化獲得新的對象
        return [];
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章