沒有完全明白,吼吼??!
class Car {
? ?private function __construct() {
? ? ? ?echo 'object create';
? ?}
? ?private static $_object = null;
? ?public static function getInstance() {
? ? ? ?if (empty(self::$_object)) {
? ? ? ? ? ?self::$_object = new Car(); //內部方法可以調用私有方法,因此這里可以創建對象
? ? ? ?}
? ? ? ?return self::$_object;
? ?}
}
//$car = new Car(); //這里不允許直接實例化對象
$car = Car::getInstance(); //通過靜態方法來獲得一個實例
2016-10-22
class Car {//這是一個CAR類
? ?private function __construct() {//這是類的構造方法,私有,決定了外部不能直接實例化CAR類
? ? ? ?echo 'object create';
? ?}
//類既然造了,肯定要用,咋辦捏
? ?private static $_object = null;//先定義一個私有靜態變量,內部才能訪問,初始值為NULL,啥都沒有
? ?public static function getInstance() {//方法為公共靜態的,外部可以直接用類名::方法名訪問
? ? ? ?if (empty(self::$_object)) {//先判斷變量是不是存著東西了(程序里曾實例化了保存過),沒東西才執行if里頭的,如果有了,表示已經實例化過這個類,不用再實例化了,意義在于俗稱單例模式,保證整個程序中只存在一個該類的實例化對象
? ? ? ? ? ?self::$_object = new Car(); //內部方法可以調用私有方法,因此這里可以創建對象
? ? ? ?}
? ? ? ?return self::$_object;//返回該靜態變量,這樣通過該方法就能得到實例化后的類。如果沒實例化過,返回的就是新得到的實例。如果以前實例過,返回的就是以前已經曾經實例化好的。意義前頭已說明。
? ?}
}
//$car = new Car(); //這里不允許直接實例化對象
$car = Car::getInstance(); //通過靜態方法來獲得一個實例
關鍵點:類中的靜態屬性作用類似于全局,深入理解可詳搜索下堆棧區存放,不理解也不影響,只需知道它不同于一般函數變量使用后就被釋放,所以方法中判斷它是否empty的意義就在于此,實現單例功能。
常用于框架底層一些服務型的類,只需實例一次,或只能被實例一次的情況。
2016-10-22
哪位大神能不怕麻煩,給每一句都注釋一下。
2016-10-22
?public static function getInstance() {? //聲明一個公有的靜態方法? 這個方法的名字牛B,也是唬人的
? ? ? ?if (empty(self::$_object)) {? //判斷類本身里面(self::,靜態不用$this->)剛才的那個$_object是(否)為空。如果為真-----》執行下面的方法
? ? ? ? ? ?self::$_object = new Car(); // 實例化,也就是創建對象?內部方法可以調用私有方法,因此這里可以創建對象
? ? ? ?}
? ? ? ?return self::$_object; //如果已經存在,就返回。。。這里不懂了
? ?}
}
2016-10-22
private static $_object = null; 聲明一個私有的靜態變量?這里$_object 命名是唬人的嗎?用下劃線給小白沖擊太大了
2016-10-22
? private function __construct() {
? ? ? ?echo 'object create';
? ?}
構造函數 輸出object create
2016-10-21
注釋都有,咋不懂了