PHP面向對象——訪問修飾符
PHP中有三種訪問修飾符,分別是:
- public(公共的、默認)
- protected(受保護的)
- private(私有的)
它們可以分別用在類的屬性和方法上(類的屬性和方法統稱爲類的成員),用來修飾類成員的訪問權限。
public(公共的、默認)
在PHP5中如果類沒有指定成員的訪問修飾符,默認就是public的訪問權限。
/* 以下兩個方法聲明訪問權限效果相同 */ function say(){}; publilc function say(){};
當類的成員被聲明爲public的訪問修飾符時,該成員能被外部代碼訪問和操作。
private(私有的)
被定義爲private的成員,對於類內部所有成員都可見,沒有訪問限制。對類外部不允許訪問。
protected(受保護的)
protected稍微有點複雜,被聲明爲protected的成員,只允許該類的子類進行訪問。
訪問權限情況表:
訪問權限 |
public |
protected |
private |
所有 |
★ |
||
子類 |
★ |
★ |
|
類內 |
★ |
★ |
★ |
以下面的例子總結:
<?php class Woman{ public $name = 'lisa'; // 公共的訪問權限 protected $money = 3000.00; // 受保護的權限 private $age = 35; // 私有的訪問權限 function printInfo(){ echo $this->name; echo $this->money; echo $this->age; } private function secret(){ echo "這是個祕密!"; } } $woman = new Woman(); echo $woman->name; // 公共屬性可以訪問 // echo $woman->money; // 受保護屬性,報致命錯誤 // echo $woman->age; // 私有屬性,報致命錯誤 $woman->printInfo(); // 可以打印三個屬性的信息,因爲printInfo是公共方法 // $woman->secret(); // 私有方法,訪問出錯 class Girl extends Woman{ // 可以重新定義父類的public和protected方法,但不能定義private的 // protected $money = 2000.00; // 可以從新定義 function printInfo(){ echo $this->name; echo $this->money; // echo $this->age; // 找不到屬性 } } $girl = new Girl(); echo $girl->name; // 公共屬性可以訪問 // echo $girl->money; // 受保護屬性,報致命錯誤 // echo $girl->age; // 私有屬性,找不到屬性 $girl->printInfo(); // 顯示$name,$money,找不到$age屬性; ?>