Dans la 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 guidera à travers le but et l'utilisation de ces modificateurs d'accès et expliquera comment les appliquer efficacement dans PHP OOP.
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.
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 dans la classe Employee, une sous-classe de 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()
Message d'erreur : Erreur fatale : Erreur non intercepté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.
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().
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 intercepté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.
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 intercepté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.
Modificateur | En classe | Classe dérivée | Hors classe |
---|---|---|---|
Publique | Oui | Oui | Oui |
Protégé | Oui | Oui | Non |
Privé | Oui | Non | Non |
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.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3