PHP 8 führte eine fantastische Funktion namens Constructor Property Promotion ein. Wenn Sie mit PHP oder dem Programmieren im Allgemeinen noch nicht vertraut sind, klingt das vielleicht etwas komplex. Aber keine Sorge! In diesem Blog erfahren Sie anhand zahlreicher Codierungsbeispiele, was es ist, warum es nützlich ist und wie Sie es verwenden können. Fangen wir an!
Vor PHP 8 erforderte das Erstellen einer Klasse mit Eigenschaften und deren Initialisierung in einem Konstruktor ziemlich viel sich wiederholenden Code. Mit der Constructor Property Promotion vereinfacht PHP 8 diesen Prozess, indem Sie Klasseneigenschaften direkt in den Konstruktorparametern deklarieren und initialisieren können.
Bei der Förderung von Constructor-Eigenschaften geht es nicht nur darum, ein paar Codezeilen einzusparen – es geht darum, Ihren Code sauberer, leichter lesbar und einfacher zu warten. Dies ist besonders wertvoll für Anfänger, die die traditionelle Art, Konstruktoren zu schreiben, möglicherweise etwas entmutigend finden.
Beginnen wir mit dem Vergleich der traditionellen Art, Klassen und Konstruktoren zu schreiben, mit der neuen Art, die in PHP 8 eingeführt wurde.
class Car { public string $make; public string $model; public int $year; public function __construct(string $make, string $model, int $year) { $this->make = $make; $this->model = $model; $this->year = $year; } } $car = new Car('Toyota', 'Corolla', 2020);
In diesem Beispiel müssen wir die Eigenschaften ($make, $model und $year) deklarieren und sie dann innerhalb des Konstruktors zuweisen. Es gibt viele Wiederholungen, insbesondere wenn es sich um Klassen handelt, die viele Eigenschaften haben.
Mit PHP 8 (Constructor Property Promotion)
class Car { public function __construct( public string $make, public string $model, public int $year ) {} } $car = new Car('Toyota', 'Corolla', 2020);
Mit Constructor Property Promotion deklarieren und weisen Sie die Eigenschaften in den Konstruktorparametern zu. Das Ergebnis ist eine prägnantere und lesbarere Klassendefinition.
Um die Leistungsfähigkeit der Constructor Property Promotion vollständig zu verstehen, schauen wir uns weitere Beispiele in verschiedenen Szenarien an.
Beispiel 1: Definieren einer Buchklasse
class Book { public function __construct( public string $title, public string $author, public int $pages, public bool $isAvailable = true ) {} } $book = new Book('1984', 'George Orwell', 328); echo $book->title; // Output: 1984 echo $book->isAvailable; // Output: 1 (true)
In dieser Book-Klasse hat die Eigenschaft isAvailable den Standardwert true. Wenn Sie diesen Parameter beim Erstellen einer Instanz der Klasse nicht angeben, wird er automatisch auf true gesetzt.
Beispiel 2: Erstellen einer Auftragsklasse
class Order { public function __construct( public int $orderId, public string $product, public float $price, public string $status = 'pending' ) {} } $order = new Order(123, 'Laptop', 999.99); echo $order->status; // Output: pending $order2 = new Order(124, 'Smartphone', 599.99, 'shipped'); echo $order2->status; // Output: shipped
Hier enthält die Order-Klasse eine Statuseigenschaft mit dem Standardwert „pending“. Sie können diesen Wert jedoch überschreiben, indem Sie beim Erstellen der Bestellung einen anderen Status angeben.
Beispiel 3: Erstellen einer Benutzerprofilklasse
class UserProfile { public function __construct( public string $username, public string $email, public int $age, private string $password, protected string $role = 'user' ) {} public function getPassword(): string { return $this->password; } } $userProfile = new UserProfile('johndoe', '[email protected]', 25, 'secret'); echo $userProfile->username; // Output: johndoe echo $userProfile->getPassword(); // Output: secret echo $userProfile->role; // Error: Cannot access protected property
In der UserProfile-Klasse ist die Passworteigenschaft privat, was bedeutet, dass außerhalb der Klasse nicht direkt darauf zugegriffen werden kann. Stattdessen verwenden Sie die Methode getPassword(), um es abzurufen. Die Rolleneigenschaft ist geschützt, sodass auf sie nur innerhalb der Klasse selbst oder durch Unterklassen zugegriffen werden kann.
Beispiel 4: Eine Produktklasse mit Konstruktor-Eigenschaftsförderung
class Product { public function __construct( public string $name, public float $price, public int $stock = 0 ) {} } $product = new Product('Laptop', 999.99, 10); echo $product->name; // Output: Laptop echo $product->stock; // Output: 10
Dieses Beispiel zeigt, wie Sie mit Constructor Property Promotion eine Produktklasse erstellen können, die einen Standardwert für die Aktieneigenschaft enthält.
**Weniger Boilerplate-Code: **Sie müssen keinen sich wiederholenden Code schreiben, um Eigenschaften zu deklarieren und zu initialisieren.
Erhöhte Lesbarkeit: Die Klassendefinition ist prägnanter und auf einen Blick leichter verständlich.
Reduzierte Fehler: Durch die Kombination von Eigenschaftsdeklaration und Initialisierung gibt es weniger Raum für Fehler.
Constructor Property Promotion in PHP 8 ist eine leistungsstarke Funktion, die die Art und Weise, wie Sie Klassen schreiben, erheblich verbessern kann. Durch die Reduzierung des Boilerplate-Codes, die Verbesserung der Lesbarkeit und die Wartbarkeit Ihres Codes ist es eine Funktion, die sowohl neue als auch erfahrene Entwickler zu schätzen wissen.
Ob Sie ein kleines Projekt oder eine große Anwendung erstellen, Constructor Property Promotion hilft Ihnen, saubereren und effizienteren PHP-Code zu schreiben. Probieren Sie es also bei Ihrem nächsten Projekt aus und genießen Sie die Vorteile dieser tollen Funktion!
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3