在 PHP 物件導向程式設計 (OOP) 中,存取修飾符控制類別屬性和方法的可見性。 PHP 中的主要存取修飾符是 public、protected 和 private。
本文將引導您了解這些存取修飾符的目的和用法,並解釋如何在 PHP OOP 中有效地應用它們。
class User { public $name = "John"; public function greet() { return "Hello, " . $this->name; } } $user = new User(); echo $user->greet(); // Output: Hello, John
在此範例中,屬性 $name 和方法greet() 都是公共的,允許從類別外部直接存取它們。
class Person { protected $age = 30; protected function getAge() { return $this->age; } } class Employee extends Person { public function showAge() { return $this->getAge(); // Correct: Accesses protected method within a subclass } } $employee = new Employee(); echo $employee->showAge(); // Output: 30
在此範例中,getAge() 是一種受保護的方法,可以在 Employee 類別(Person 的子類別)中存取該方法。
class Person { protected $age = 30; protected function getAge() { return $this->age; } } $person = new Person(); echo $person->getAge(); // Error: Cannot access protected method Person::getAge()
錯誤訊息:致命錯誤:未捕獲錯誤:無法存取受保護的方法 Person::getAge()
在這種情況下,嘗試直接從 Person 的實例存取受保護的方法 getAge() 會導致錯誤,因為無法從類別外部存取受保護的方法。
class BankAccount { private $balance = 1000; private function getBalance() { return $this->balance; } public function showBalance() { return $this->getBalance(); // Correct: Accesses private method within the same class } } $account = new BankAccount(); echo $account->showBalance(); // Output: 1000
在此範例中,getBalance() 方法是私有的,因此只能在 BankAccount 類別中存取它。 showBalance() 方法是公用的,可用來間接存取私有 getBalance()。
class BankAccount { private $balance = 1000; private function getBalance() { return $this->balance; } } $account = new BankAccount(); echo $account->getBalance(); // Error: Cannot access private method BankAccount::getBalance()
錯誤訊息:致命錯誤:未捕獲錯誤:無法存取私有方法 BankAccount::getBalance()
在這種情況下,嘗試直接從 BankAccount 的實例存取私有方法 getBalance() 會導致錯誤,因為私有方法無法從類別外部存取。
class BankAccount { private $balance = 1000; private function getBalance() { return $this->balance; } } class SavingsAccount extends BankAccount { public function showBalance() { return $this->getBalance(); // Error: Cannot access private method BankAccount::getBalance() } } $savings = new SavingsAccount(); echo $savings->showBalance();
錯誤訊息:致命錯誤:未捕獲錯誤:無法存取私有方法 BankAccount::getBalance()
這裡,私有方法 getBalance() 即使對於像 SavingsAccount 這樣的子類別也是不可存取的,這表明私有方法不能在其定義類別之外存取。
修飾符 | 課堂內 | 衍生類別 | 課外 |
---|---|---|---|
民眾 | 是的 | 是的 | 是的 |
受保護 | 是的 | 是的 | 不 |
私人的 | 是的 | 不 | 不 |
PHP 的存取修飾符(public、protected、private)提供了一種管理 OOP 中可見性和封裝的機制。透過正確理解和應用這些修飾符,您可以建立更安全且可維護的程式碼。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3