沒有完全明白,吼吼??!
class Car {
? ?private function __construct() {
? ? ? ?echo 'object create';
? ?}
? ?private static $_object = null;
? ?public static function getInstance() {
? ? ? ?if (empty(self::$_object)) {
? ? ? ? ? ?self::$_object = new Car(); //內(nèi)部方法可以調(diào)用私有方法,因此這里可以創(chuàng)建對象
? ? ? ?}
? ? ? ?return self::$_object;
? ?}
}
//$car = new Car(); //這里不允許直接實例化對象
$car = Car::getInstance(); //通過靜態(tài)方法來獲得一個實例
2016-10-22
class Car {//這是一個CAR類
? ?private function __construct() {//這是類的構(gòu)造方法,私有,決定了外部不能直接實例化CAR類
? ? ? ?echo 'object create';
? ?}
//類既然造了,肯定要用,咋辦捏
? ?private static $_object = null;//先定義一個私有靜態(tài)變量,內(nèi)部才能訪問,初始值為NULL,啥都沒有
? ?public static function getInstance() {//方法為公共靜態(tài)的,外部可以直接用類名::方法名訪問
? ? ? ?if (empty(self::$_object)) {//先判斷變量是不是存著東西了(程序里曾實例化了保存過),沒東西才執(zhí)行if里頭的,如果有了,表示已經(jīng)實例化過這個類,不用再實例化了,意義在于俗稱單例模式,保證整個程序中只存在一個該類的實例化對象
? ? ? ? ? ?self::$_object = new Car(); //內(nèi)部方法可以調(diào)用私有方法,因此這里可以創(chuàng)建對象
? ? ? ?}
? ? ? ?return self::$_object;//返回該靜態(tài)變量,這樣通過該方法就能得到實例化后的類。如果沒實例化過,返回的就是新得到的實例。如果以前實例過,返回的就是以前已經(jīng)曾經(jīng)實例化好的。意義前頭已說明。
? ?}
}
//$car = new Car(); //這里不允許直接實例化對象
$car = Car::getInstance(); //通過靜態(tài)方法來獲得一個實例
關(guān)鍵點:類中的靜態(tài)屬性作用類似于全局,深入理解可詳搜索下堆棧區(qū)存放,不理解也不影響,只需知道它不同于一般函數(shù)變量使用后就被釋放,所以方法中判斷它是否empty的意義就在于此,實現(xiàn)單例功能。
常用于框架底層一些服務(wù)型的類,只需實例一次,或只能被實例一次的情況。