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