1. 程式人生 > >php單例模式的實例

php單例模式的實例

需要 struct 成員 oca 克隆 允許 自定義 構造 str

class Config1 {}
class Config
{
* 必須先聲明一個靜態私有屬性:用來保存當前類的實例

* 1. 為什麽必須是靜態的?因為靜態成員屬於類,並被類所有實例所共享

* 2. 為什麽必須是私有的?不允許外部直接訪問,僅允許通過類方法控制方法

* 3. 為什麽要有初始值null,因為類內部訪問接口需要檢測實例的狀態,判斷是否需要實例化

private static $instance = null;

//保存用戶的自定義配置參數

private $setting = [];

//構造器私有化:禁止從類外部實例化

private function __construct(){}

//克隆方法私有化:禁止從外部克隆對象 private function __clone(){} //因為用靜態屬性返回類實例,而只能在靜態方法使用靜態屬性 //所以必須創建一個靜態方法來生成當前類的唯一實例 public static function getInstance() { //檢測當前類屬性$instance是否已經保存了當前類的實例 if (self::$instance == null) { //如果沒有,則創建當前類的實例 self::$instance
= new self(); } //如果已經有了當前類實例,就直接返回,不要重復創建類實例 return self::$instance; } //設置配置項 public function set($index, $value) { $this->setting[$index] = $value; } //讀取配置項 public function get($index) { return $this->setting[$index]; } } $obj1 = new Config1; $obj2
= new Config1; var_dump($obj1,$obj2); echo ‘<hr>‘; //實例化Config類 $obj1 = Config::getInstance(); $obj2 = Config::getInstance(); var_dump($obj1,$obj2); $obj1->set(‘host‘,‘localhost‘); echo $obj1->get(‘host‘);

* 單例模式:一個類僅允許創建一個實例

php單例模式的實例