在 PHP 物件導向程式設計中,訪問修飾符是控制類成員(屬性和方法)可見性的關鍵機制。PHP 提供了三種訪問修飾符:public(公有)、protected(受保護)和 private(私有)。正確理解並使用它們,能夠幫助我們構建封裝性良好、安全且易於維護的代碼。
public 是默認的訪問級別。如果類成員沒有顯式聲明訪問修飾符,PHP 會將其視為 public。被聲明為 public 的屬性或方法,可以在任何地方被訪問:類內部、子類以及類外部(通過對象實例)。
<?php
class Example {
public $name = 'Public Property';
public function sayHello() {
echo "Hello, " . $this->name;
}
}
$obj = new Example();
echo $obj->name; // 類外部訪問屬性:合法
$obj->sayHello(); // 類外部調用方法:合法
?>
protected 成員只能在該類內部及其子類中訪問。類外部無法直接通過對象實例訪問 protected 成員。這適合用於希望對外隱藏實現細節,但允許子類繼承或覆蓋的場景。
<?php
class ParentClass {
protected $secret = 'Protected Secret';
protected function protectedMethod() {
return 'Protected method called';
}
}
class ChildClass extends ParentClass {
public function revealSecret() {
return $this->secret; // 子類中訪問 protected 屬性:合法
}
}
$child = new ChildClass();
echo $child->revealSecret(); // 輸出: Protected Secret
// echo $child->secret; // 錯誤:不能在類外部訪問 protected 屬性
?>
private 成員的訪問權限最嚴格。它們只能在定義它們的類內部訪問。即使是子類也無法訪問父類的 private 成員(但可以聲明同名的私有成員)。這提供了最高程度的封裝。
<?php
class MyClass {
private $privateProp = 'Private Value';
private function privateMethod() {
return 'Private method';
}
public function getPrivateProp() {
return $this->privateProp; // 類內部訪問:合法
}
}
$obj = new MyClass();
echo $obj->getPrivateProp(); // 輸出: Private Value
// echo $obj->privateProp; // 錯誤:類外部不可訪問
// $obj->privateMethod(); // 錯誤:類外部不可調用
?>
| 修飾符 | 類內部 | 子類 | 類外部(對象實例) |
|---|---|---|---|
| public | ✔ | ✔ | ✔ |
| protected | ✔ | ✔ | ✘ |
| private | ✔ | ✘ | ✘ |
掌握這三種訪問修飾符的區別與適用場景,是編寫高質量 PHP 面向對象代碼的基礎。合理的封裝不僅提高了代碼的安全性,也降低了模塊間的耦合度,讓系統更易於擴展和維護。