"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Comprensión de los modificadores de acceso en PHP OOP: público, protegido y privado

Comprensión de los modificadores de acceso en PHP OOP: público, protegido y privado

Publicado el 2024-11-08
Navegar:388

Understanding Access Modifiers in PHP OOP: Public, Protected, and Private

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.

1. Modificador de acceso público

  • Palabra clave: público
  • Visibilidad: Accesible desde cualquier lugar: dentro de la clase, fuera de la clase y en clases derivadas.
  • Caso de uso: utilice público para propiedades o métodos a los que se debería poder acceder desde cualquier contexto.

Ejemplo:

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.

2. Modificador de acceso protegido

  • Palabra clave: protegido
  • Visibilidad: Accesible dentro de la propia clase y por subclases (clases secundarias), pero no desde fuera de la clase.
  • Caso de uso: use protected para permitir que las clases derivadas accedan a ciertas propiedades o métodos mientras los mantiene ocultos del código externo.

Ejemplo con Acceso Correcto:

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.

Ejemplo con error:

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.

3. Modificador de acceso privado

  • Palabra clave: privado
  • Visibilidad: Solo accesible dentro de la clase donde está definido. No accesible desde subclases o código externo.
  • Caso de uso: use privado para ocultar propiedades o métodos de cualquier código fuera de la clase, incluidas las clases derivadas.

Ejemplo con Acceso Correcto:

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.

Ejemplo con error:

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.

Ejemplo con error en subclase:

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.

4. Resumen de modificadores de acceso

Modificador Dentro de la clase Clase derivada Fuera de clase
Público
Protegido No
Privado No No

5. Mejores prácticas

  • Utilice public con moderación para exponer solo lo necesario. Prefiere la encapsulación y expone la funcionalidad mediante métodos públicos.
  • Utilice protected para permitir que las subclases accedan a las propiedades o métodos necesarios mientras los ocultan del código externo.
  • Utilice privado para encapsular completamente los componentes internos de la clase y evitar el acceso desde clases externas o derivadas.

Conclusión

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.

Declaración de liberación Este artículo se reproduce en: https://dev.to/ialaminpro/understanding-access-modifiers-in-php-oop-public-protected-and-private-5bah?1 Si hay alguna infracción, comuníquese con Study_golang@163 .com para eliminarlo
Último tutorial Más>

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