En la programación orientada a objetos (OOP) de PHP, los modificadores de acceso controlan la visibilidad de las propiedades y métodos de la clase. Los principales modificadores de acceso en PHP son público, protegido y privado.
Este artículo lo guiará a través del propósito y uso de estos modificadores de acceso y le explicará cómo aplicarlos efectivamente en PHP OOP.
class User { public $name = "John"; public function greet() { return "Hello, " . $this->name; } } $user = new User(); echo $user->greet(); // Output: Hello, John
En este ejemplo, tanto la propiedad $name como el método greet() son públicos, lo que permite acceder a ellos directamente desde fuera de la clase.
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
En este ejemplo, getAge() es un método protegido, al que se puede acceder dentro de la clase Empleado, una subclase de Persona.
class Person { protected $age = 30; protected function getAge() { return $this->age; } } $person = new Person(); echo $person->getAge(); // Error: Cannot access protected method Person::getAge()
Mensaje de error: Error grave: Error no detectado: No se puede acceder al método protegido Persona::getAge()
En este caso, intentar acceder al método protegido getAge() directamente desde una instancia de Persona da como resultado un error porque no se puede acceder a los métodos protegidos desde fuera de la clase.
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
En este ejemplo, el método getBalance() es privado, por lo que solo se puede acceder a él dentro de la clase BankAccount. El método showBalance() es público y se puede utilizar para acceder indirectamente al getBalance() privado.
class BankAccount { private $balance = 1000; private function getBalance() { return $this->balance; } } $account = new BankAccount(); echo $account->getBalance(); // Error: Cannot access private method BankAccount::getBalance()
Mensaje de error: Error fatal: Error no detectado: No se puede acceder al método privado BankAccount::getBalance()
En este caso, intentar acceder al método privado getBalance() directamente desde una instancia de BankAccount produce un error porque no se puede acceder a los métodos privados desde fuera de la clase.
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();
Mensaje de error: Error fatal: Error no detectado: No se puede acceder al método privado BankAccount::getBalance()
Aquí, el método privado getBalance() es inaccesible incluso para subclases como SavingsAccount, lo que demuestra que no se puede acceder a los métodos privados fuera de su clase que los define.
Modificador | Dentro de la clase | Clase derivada | Fuera de clase |
---|---|---|---|
Público | Sí | Sí | Sí |
Protegido | Sí | Sí | No |
Privado | Sí | No | No |
Los modificadores de acceso de PHP (público, protegido, privado) proporcionan un mecanismo para gestionar la visibilidad y la encapsulación en programación orientada a objetos. Si comprende y aplica estos modificadores correctamente, podrá crear un código más seguro y fácil de mantener.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3