在 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