Table of Contents
PHP 存取修飾符(Access Modifiers)包括 public、private 和 protected,主要目的是管理類別內部的屬性和方法的可訪問性。通過這些修飾符,開發者能確保數據的安全性和程式的穩健性。
Public (公開)
在 PHP 中,public
是一個存取修飾符,用於定義類別(class)的屬性和方法的可見性。當一個屬性或方法被標記為 public
,這表示它可以在任何地方被存取,包括該類別之外。
使用 public
的主要理由是你想讓這個屬性或方法能夠被任何人(其他類別和程式碼)訪問和修改。這裡有一些常見的使用情境:
使用 public 的理由
共用功能:
如果你有一個函數或變數,你希望在多個不同的地方都能使用,那麼把它設成 public
是有用的。
簡單性:
使用 public
會讓你的程式碼更簡單,更容易理解。因為你不需要寫額外的函數來讀取或更改這個變數。
與外部互動:
當你的類別需要與外部世界(比如用戶輸入或其他類別)互動時,使用 public
可以直接地讓外部存取這個類別的特定部分。
擴展和維護:
如果這個屬性或方法可能在未來被其他開發者或者其他類別所需要,設它為 public
可以讓其他人更容易地擴展和維護程式。
減少冗餘:
當多個類別需要同樣的功能或數據時,把這個功能或數據設為 public
可以避免重複的程式碼。
小提醒
public
可能會帶來一些風險,比如很容易破壞資料的完整性,所以要謹慎使用。公開程式範例
// 定義一個 Animal 類別
class Animal {
// 使用 public 修飾符定義一個屬性
public $name;
// 使用 public 修飾符定義一個方法
public function makeSound() {
return "Some generic animal sound";
}
}
// 建立一個 Animal 類別的實例
$animal = new Animal();
// 存取 public 屬性
$animal->name = "Dog";
// 存取 public 方法
echo $animal->makeSound(); // 輸出:Some generic animal sound
當您希望某個方法或屬性可以從類別之外被存取,或者有一個 API 或接口,希望其他程式碼可以自由使用時,public 是個好選項。
Private (私有)
private
是一種存取修飾符,用於限制類別屬性或方法只能在該類別內部被存取。
使用 private 的理由
使用 private
的主要目的是將類別的特定部分隱藏起來,只讓這個類別自己能夠訪問或修改它們。這樣做有幾個好處:
資料安全性:
把一個屬性或方法設為 private
可以保護它不會被外部不應該的訪問或修改。
降低複雜性:
使用 private
可以讓你更清楚地知道哪些功能是僅供類別內部使用的。這樣,其他開發者就不會意外地修改這些部分。
易於維護:
因為 private
屬性或方法只在類別內部使用,如果需要改變它們,你只需要查看這個類別的程式碼,不用擔心會影響到其他地方。
實施封裝(Encapsulation):
將內部的實現細節隱藏起來,並只暴露出有限的、必要的接口,是物件導向編程的一個重要原則。
增加可重用性:
當你的程式碼只依賴於類別的公開接口,而不依賴於內部的 private
實現,你會發現更容易在其他地方重用這個類別。
private
修飾符有助於保護數據,簡化複雜性,並提高程式的可維護性和可重用性。
私有範例
// 定義一個 Person 類別
class Person {
// 使用 private 修飾符定義一個屬性
private $age;
// 使用 public 修飾符定義一個方法來設定 age
public function setAge($value) {
if ($value > 0) {
$this->age = $value;
}
}
// 使用 public 修飾符定義一個方法來獲取 age
public function getAge() {
return $this->age;
}
}
// 建立一個 Person 類別的實例
$person = new Person();
// 透過 public 方法設定 age
$person->setAge(25);
// 透過 public 方法獲取 age
echo $person->getAge(); // 輸出:25
當您希望封裝某些類別的內部邏輯,或不希望外部程式碼直接更改類別的內部狀態時,prviate 是個好選擇。
小提示
Protected (受保護)
protected
是一個存取修飾符,表示這些屬性和方法只能在該類別及其子類別中被存取。
使用 protected 的理由
使用 protected
的主要理由是為了在限制一些訪問的同時,還能保留一定程度的靈活性。以下是幾個為什麼你可能會想用 protected
的情況:
繼承與擴展:
當你有一個類別(我們可以把它想像成一個「父親」玩具箱)和這個類別的子類別(就像「孩子」玩具箱),你可能會想要有些玩具只能由這一家人使用,而不能由外面的人使用。在這種情況下,protected
就很有用。
安全性與可控性:
使用 protected
修飾符表示你不希望其他無關的類別,直接訪問這個屬性或方法,但你又希望子類別能有一些更多的操作空間。
模組化設計:
當你設計一個可擴展的系統,你可能會想用 protected
來定義一些可以由子類別修改或擴展的核心行為。
代碼重用:
有時候多個類別需要共用一些相似的功能。透過使用 protected
,子類別可以繼承並使用這些功能,而無需重新寫代碼。
增加代碼的組織性:
使用 protected
可以幫助你更清晰地劃分哪些功能是基礎功能,應該由所有子類別共享,以及哪些功能是只應該由特定類別使用的。
更好的團隊合作:
當一個大的開發團隊在一個大型專案上工作時,使用 protected
可以幫助每個開發者更清楚地了解他們應該和不應該修改哪些代碼。
protected
提供了一種平衡,允許你在保護數據和提供某種程度的靈活性之間找到一個中間點。這對於建立穩健和可擴展的物件導向程序是非常有用的。
受保護範例
// 定義一個基礎類別 ParentClass
class ParentClass {
// 使用 protected 修飾符定義一個屬性
protected $value = "I'm a protected value";
// 使用 protected 修飾符定義一個方法
protected function showValue() {
return $this->value;
}
}
// 定義一個從 ParentClass 繼承的子類別
class ChildClass extends ParentClass {
// 使用 public 修飾符定義一個方法來顯示 protected 的屬性和方法
public function reveal() {
echo $this->value; // 可存取
echo $this->showValue(); // 可存取
}
}
// 建立一個 ChildClass 類別的實例
$child = new ChildClass();
// 使用 public 方法來顯示 protected 的屬性和方法
$child->reveal(); // 輸出:I'm a protected valueI'm a protected value
當您希望某些屬性或方法,只能被同一繼承體系的子類別使用,同時不被外人所知,protected 非常適合這個工作。
最後
總結以上,您能學習到 PHP 中有關 public
、private
和 protected
的基本概念和使用情境,這些知識會加強對於資料封裝的感覺,可以自然而然的產生功能緊密的物件,又能同時保持健壯的類別。