亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

沒有完全明白,吼吼??!

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(); //通過靜態方法來獲得一個實例

正在回答

6 回答

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的意義就在于此,實現單例功能。

常用于框架底層一些服務型的類,只需實例一次,或只能被實例一次的情況。

4 回復 有任何疑惑可以回復我~
#1

五十歲的灰哥 提問者

非常感謝!it培訓這樣牛人必不可少
2016-10-22 回復 有任何疑惑可以回復我~

哪位大神能不怕麻煩,給每一句都注釋一下。

0 回復 有任何疑惑可以回復我~

?public static function getInstance() {? //聲明一個公有的靜態方法? 這個方法的名字牛B,也是唬人的
? ? ? ?if (empty(self::$_object)) {? //判斷類本身里面(self::,靜態不用$this->)剛才的那個$_object是(否)為空。如果為真-----》執行下面的方法
? ? ? ? ? ?self::$_object = new Car(); // 實例化,也就是創建對象?內部方法可以調用私有方法,因此這里可以創建對象
? ? ? ?}
? ? ? ?return self::$_object; //如果已經存在,就返回。。。這里不懂了
? ?}
}

0 回復 有任何疑惑可以回復我~

private static $_object = null; 聲明一個私有的靜態變量?這里$_object 命名是唬人的嗎?用下劃線給小白沖擊太大了

0 回復 有任何疑惑可以回復我~

? private function __construct() {
? ? ? ?echo 'object create';
? ?}

構造函數 輸出object create

0 回復 有任何疑惑可以回復我~

注釋都有,咋不懂了

0 回復 有任何疑惑可以回復我~
#1

五十歲的灰哥 提問者

對于小白來說是咋看都不會懂滴
2016-10-22 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

沒有完全明白,吼吼?。?/h1> 我要回答 關注問題

微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號