在 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中文网其他相关文章!