Objekte und Datenstrukturen
Objekte und Datenstrukturen
1. Getter und Setter verwenden. Objektkapselung verwenden
2. Verwenden Sie private oder geschützte Mitgliedsvariablen für Objekte
1. Verwenden Sie Getter und Setter
In PHP können Sie public
, protected
, private
für Methoden verwenden, um Änderungen an Objekteigenschaften zu steuern.
-
Wenn Sie andere Vorgänge als das Abrufen der Eigenschaften eines Objekts ausführen möchten, müssen Sie nicht jede Eigenschaftszugriffsmethode im Code suchen und ändern.
-
Wenn eine Attributmethode vorhanden ist, die
set
entspricht, ist es einfach, eine Parameterüberprüfung hinzuzufügen -
Darstellung innerhalb des Pakets
-
Einfaches Hinzufügen von Protokollierung und Fehlerkontrolle bei Verwendung von
set
undget
-
Beim Erben der aktuellen Klasse können Sie die Standardmethodenfunktion überschreiben
-
get*
,set*
sind einfach zu verwendendes Lazy Loading, wenn die Objekteigenschaften vom Remote-Server abgerufen werden
Darüber hinaus entspricht dieser Ansatz auch dem Öffnungs- und Schließprinzip in der OOP-Entwicklung.
Schlecht:
class BankAccount { public $balance = 1000; } $bankAccount = new BankAccount(); // Buy shoes... $bankAccount->balance -= 100;
Gut:
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. Verwenden Sie private oder geschützte Mitgliedsvariablen für Objekte
-
Das Ändern öffentlicher Methoden und Eigenschaften ist sehr gefährlich, da sich externer Code leicht darauf verlassen kann und Sie keine Kontrolle darüber haben. Änderungen hieran wirken sich auf alle Benutzer dieser Klasse aus. Öffentliche Methoden und Eigenschaften sind für Änderungen am gefährlichsten, da sich einige externe Codes leicht auf sie verlassen können und Sie nicht kontrollieren können, welcher Code auf ihnen basiert. Änderungen in der Klasse sind für alle Benutzer der Klasse gefährlich.
-
Änderungen an protected sind fast genauso gefährlich wie Änderungen an public, da sie für Unterklassen verfügbar sind. Der einzige Unterschied zwischen ihnen besteht darin, dass die aufrufbaren Speicherorte unterschiedlich sind und Änderungen an ihnen alle Orte betreffen, die diese Klasse integrieren. protected Modifikatoren sind genauso gefährlich wie public, da sie im Gültigkeitsbereich jeder untergeordneten Klasse verfügbar sind. Dies bedeutet effektiv, dass der Unterschied zwischen public und protected nur im Zugriffsmechanismus besteht, die Kapselungsgarantie jedoch für alle Nachkommenklassen gleich bleibt .
-
Änderungen an private garantieren, dass sich dieser Teil des Codes nur auf die aktuelle Klasse auswirkt. Der private Modifikator garantiert, dass es gefährlich ist, Code nur innerhalb der Grenzen einer einzelnen Klasse zu ändern (Sie sind bei Änderungen sicher und haben keinen Jenga-Effekt).
Verwenden Sie daher public/protected
nur, wenn Sie steuern müssen, ob auf den Code in der Klasse zugegriffen werden kann, andernfalls verwenden Sie private
.
Sie können diesen Blogbeitrag von Fabien Potencier lesen.
Schlecht:
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
Gut:
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