Maison  >  Article  >  développement back-end  >  Comprendre les modificateurs d'accès dans PHP POO : public, protégé et privé

Comprendre les modificateurs d'accès dans PHP POO : public, protégé et privé

PHPz
PHPzoriginal
2024-09-11 06:33:541008parcourir

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

En programmation orientée objet (POO) PHP, les modificateurs d'accès contrôlent la visibilité des propriétés et des méthodes de classe. Les principaux modificateurs d'accès en PHP sont publics, protégés et privés.

Cet article vous expliquera le but et l'utilisation de ces modificateurs d'accès et expliquera comment les appliquer efficacement en PHP OOP.

1. Modificateur d'accès public

  • Mot clé : public
  • Visibilité : accessible de n'importe où : à l'intérieur de la classe, à l'extérieur de la classe et dans les classes dérivées.
  • Cas d'utilisation : utilisez public pour les propriétés ou les méthodes qui doivent être accessibles depuis n'importe quel contexte.

Exemple:

class User {
    public $name = "John";

    public function greet() {
        return "Hello, " . $this->name;
    }
}

$user = new User();
echo $user->greet();  // Output: Hello, John

Dans cet exemple, la propriété $name et la méthode greet() sont publiques, ce qui permet d'y accéder directement depuis l'extérieur de la classe.

2. Modificateur d'accès protégé

  • Mot clé : protégé
  • Visibilité : Accessible au sein de la classe elle-même et par les sous-classes (classes enfants), mais pas de l'extérieur de la classe.
  • Cas d'utilisation : utilisez protected pour permettre aux classes dérivées d'accéder à certaines propriétés ou méthodes tout en les gardant cachées du code externe.

Exemple avec un accès correct :

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

Dans cet exemple, getAge() est une méthode protégée, accessible au sein de la classe Employee, une sous-classe de Person.

Exemple avec erreur :

class Person {
    protected $age = 30;

    protected function getAge() {
        return $this->age;
    }
}

$person = new Person();
echo $person->getAge();  // Error: Cannot access protected method Person::getAge()

Message d'erreur : Erreur fatale : Erreur non détectée : Impossible d'accéder à la méthode protégée Person::getAge()

Dans ce cas, tenter d'accéder à la méthode protégée getAge() directement à partir d'une instance de Person entraîne une erreur car les méthodes protégées ne sont pas accessibles depuis l'extérieur de la classe.

3. Modificateur d'accès privé

  • Mot clé : privé
  • Visibilité : Accessible uniquement au sein de la classe où il est défini. Non accessible depuis les sous-classes ou le code externe.
  • Cas d'utilisation : utilisez private pour masquer les propriétés ou les méthodes de tout code extérieur à la classe, y compris les classes dérivées.

Exemple avec un accès correct :

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

Dans cet exemple, la méthode getBalance() est privée, elle n'est donc accessible qu'au sein de la classe BankAccount. La méthode showBalance() est publique et peut être utilisée pour accéder indirectement à la méthode privée getBalance().

Exemple avec erreur :

class BankAccount {
    private $balance = 1000;

    private function getBalance() {
        return $this->balance;
    }
}

$account = new BankAccount();
echo $account->getBalance();  // Error: Cannot access private method BankAccount::getBalance()

Message d'erreur : Erreur fatale : Erreur non détectée : Impossible d'accéder à la méthode privée BankAccount::getBalance()

Dans ce cas, tenter d'accéder à la méthode privée getBalance() directement à partir d'une instance de BankAccount entraîne une erreur car les méthodes privées ne sont pas accessibles depuis l'extérieur de la classe.

Exemple avec erreur dans la sous-classe :

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();

Message d'erreur : Erreur fatale : Erreur non détectée : Impossible d'accéder à la méthode privée BankAccount::getBalance()

Ici, la méthode privée getBalance() est inaccessible même aux sous-classes comme SavingsAccount, démontrant que les méthodes privées ne sont pas accessibles en dehors de leur classe de définition.

4. Résumé des modificateurs d'accès

Modificateur À l'intérieur de la classe Classe dérivée En dehors des cours ête>
Modifier Inside Class Derived Class Outside Class
Public Yes Yes Yes
Protected Yes Yes No
Private Yes No No
Public Oui Oui Oui

Protégé

Oui Oui Non Privé Oui Non Non
  • 5. Meilleures pratiques
  • Utilisez public
  • avec parcimonie pour exposer uniquement ce qui est nécessaire. Préférez l'encapsulation et exposez les fonctionnalités via des méthodes publiques.
  • Utilisez protected
  • pour permettre aux sous-classes d'accéder aux propriétés ou méthodes nécessaires tout en les masquant du code externe.

Utilisez private pour encapsuler entièrement les éléments internes de la classe et empêcher l'accès depuis l'extérieur ou les classes dérivées.

Conclusion Les modificateurs d'accès de PHP (public, protégé, privé) fournissent un mécanisme pour gérer la visibilité et l'encapsulation en POO. En comprenant et en appliquant correctement ces modificateurs, vous pouvez créer un code plus sécurisé et plus maintenable.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn