Objets et structures de données
Objets et structures de données
1. Utilisez les getters et les setters Utilisez l'encapsulation d'objets
2. Utilisez des variables membres privées ou protégées pour les objets
1. Utilisez des getters et des setters
En PHP, vous pouvez utiliser public
, protected
, private
sur les méthodes pour contrôler les modifications apportées aux propriétés des objets.
-
Lorsque vous souhaitez effectuer des opérations autres que l'obtention des propriétés d'un objet, vous n'avez pas besoin de rechercher et de modifier chaque méthode d'accès aux propriétés dans le code.
-
Lorsqu'il existe une méthode d'attribut
set
correspondante, il est facile d'ajouter une vérification des paramètres -
Représentation à l'intérieur du colis
-
Ajout facile de la journalisation et du contrôle des erreurs lors de l'utilisation de
set
和get
etget
-
Lors de l'héritage de la classe actuelle, vous pouvez remplacer la fonction de méthode par défaut
-
get*
,set*
Facile à utiliser le chargement différé lorsque les propriétés d'un objet sont récupérées à partir d'un serveur distant
De plus, cette approche est également conforme au principe d'ouverture et de fermeture du développement de la POO.
Mauvais :
class BankAccount { public $balance = 1000; } $bankAccount = new BankAccount(); // Buy shoes... $bankAccount->balance -= 100;
Bien :
class BankAccount { private $balance; public function __construct(int $balance = 1000) { $this->balance = $balance; } public function withdraw(int $amount): void { if ($amount > $this->balance) { throw new \Exception('Amount greater than available balance.'); } $this->balance -= $amount; } public function deposit(int $amount): void { $this->balance += $amount; } public function getBalance(): int { return $this->balance; } } $bankAccount = new BankAccount(); // Buy shoes... $bankAccount->withdraw($shoesPrice); // Get balance $balance = $bankAccount->getBalance();
2. Utilisez des variables membres privées ou protégées pour les objets
-
La modification des méthodes et propriétés publiques est très dangereuse car le code externe peut facilement s'appuyer sur elles et vous n'avez aucun contrôle sur elles. Les modifications apportées à cela affectent tous les utilisateurs de cette classe. Les méthodes et propriétés publiques sont les plus dangereuses pour les modifications, car certains codes extérieurs peuvent facilement s'appuyer sur elles et vous ne pouvez pas contrôler quel code en dépend. Les modifications en classe sont dangereuses pour tous les utilisateurs de la classe.
-
Les modifications apportées à protected sont presque aussi dangereuses que les modifications apportées à public, car elles sont disponibles pour les sous-classes. La seule différence entre elles est que les emplacements appelables sont différents et que leurs modifications affectent tous les emplacements qui intègrent cette classe. Les modificateurs protected sont aussi dangereux que public, car ils sont disponibles dans la portée de n'importe quelle classe enfant. Cela signifie effectivement que la différence entre public et protected réside uniquement dans le mécanisme d'accès, mais la garantie d'encapsulation reste la même. Les modifications dans la classe sont dangereuses pour toutes les classes descendantes. .
-
Les modifications apportées à private garantissent que cette partie du code n'affectera que la classe actuelle. Le modificateur privé garantit qu'il est dangereux de modifier le code uniquement dans les limites d'une seule classe (vous êtes en sécurité pour les modifications et vous n'aurez pas d'effet Jenga).
Alors, utilisez public/protected
,其他时候都用private
uniquement lorsque vous devez contrôler si le code de la classe est accessible.
Vous pouvez lire cet article de Fabien Potencier.
Mauvais :
class Employee { public $name; public function __construct(string $name) { $this->name = $name; } } $employee = new Employee('John Doe'); echo 'Employee name: '.$employee->name; // Employee name: John Doe
Bien :
class Employee { private $name; public function __construct(string $name) { $this->name = $name; } public function getName(): string { return $this->name; } } $employee = new Employee('John Doe'); echo 'Employee name: '.$employee->getName(); // Employee name: John Doe