- 申請一個私有的靜態成員變量來保存該類的唯一實例
- 聲明私有的構造方法,防止類外部創建對象
- 聲明一個靜態公共方法,供外部獲取唯一實例
這三步走完,就是一個單例了,但是這個單例是不安全的,想要這個單例安全,還需以下兩步(如有不完善還請補充)
- 聲明私有的克隆方法,防止對象被克隆
- 重寫__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 [];
}
}