前面的小節(jié),我們已經接觸過訪問控制了,訪問控制通過關鍵字public,protected和private來實現。被定義為公有的類成員可以在任何地方被訪問。被定義為受保護的類成員則可以被其自身以及其子類和父類訪問。被定義為私有的類成員則只能被其定義所在的類訪問。
類屬性必須定義為公有、受保護、私有之一。為兼容PHP5以前的版本,如果采用 var 定義,則被視為公有。
class Car {
$speed = 10; //錯誤 屬性必須定義訪問控制
public $name; //定義共有屬性
}
類中的方法可以被定義為公有、私有或受保護。如果沒有設置這些關鍵字,則該方法默認為公有。
class Car { ? //默認為共有方法 function turnLeft() { } }
如果構造函數定義成了私有方法,則不允許直接實例化對象了,這時候一般通過靜態(tài)方法進行實例化,在設計模式中會經常使用這樣的方法來控制對象的創(chuàng)建,比如單例模式只允許有一個全局唯一的對象。
class Car { private function __construct() { echo 'object create'; } private static $_object = null; public static function getInstance() { if (empty(self::$_object)) { self::$_object = new Car(); //內部方法可以調用私有方法,因此這里可以創(chuàng)建對象 } return self::$_object; } } //$car = new Car(); //這里不允許直接實例化對象 $car = Car::getInstance(); //通過靜態(tài)方法來獲得一個實例
我也來試一試:增加start方法,使他能夠調用受保護的方法speedUp實現加速10。
在右側代碼編輯器第14-16行輸入下面代碼:
public function start() { $this->speedUp(); }
//增加start方法,使他能夠調用受保護的方法speedUp實現加速10 public function start() { $this->speedUp(); }
請驗證,完成請求
由于請求次數過多,請先驗證,完成再次請求
打開微信掃碼自動綁定
綁定后可得到
使用 Ctrl+D 可將課程添加到書簽
舉報