php單例模式的實例
阿新 • • 發佈:2018-10-25
需要 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單例模式的實例