在 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() 是受保護的方法,可在 Person 的子類別 Employee 類別中存取。
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 這樣的子類別也無法訪問,這表明私有方法無法在其定義類別之外訪問。
Modifier | Inside Class | Derived Class | Outside Class |
---|---|---|---|
Public | Yes | Yes | Yes |
Protected | Yes | Yes | No |
Private | Yes | No | No |
以上是了解 PHP OOP 中的存取修飾符:公有、受保護和私有的詳細內容。更多資訊請關注PHP中文網其他相關文章!