PHP 8.4 ist endlich da und bringt aufregende Änderungen mit sich, die die Arbeitsweise von Entwicklern verändern werden! Mit jeder neuen Version beweist PHP immer wieder, warum es ein so unverzichtbares Werkzeug in der heutigen Webentwicklungslandschaft ist.
In diesem Artikel wird davon ausgegangen, dass Sie über Grundkenntnisse der Programmiersprache PHP verfügen.
Laravel Herd: Wird zur Verwaltung meiner PHP-Versionen und meines Nginx-Servers verwendet.
PHPStorm: Eine großartige IDE mit gutem IntelliSense und KI-Copilot.
Laragon: Eine benutzerfreundliche lokale Entwicklungsumgebung, die PHP und andere Technologien unterstützt.
In PHP war die Sichtbarkeit von Objekteigenschaften traditionell symmetrisch. Das bedeutet, dass die Get- und Set-Vorgänge für eine Eigenschaft dieselbe Sichtbarkeit haben müssen – öffentlich, privat oder geschützt –, sich aber nicht unterscheiden dürfen.
Wenn beispielsweise eine Eigenschaft öffentlich ist, sind sowohl das Lesen als auch das Schreiben darauf öffentlich, und es gibt keine Möglichkeit, einen Vorgang ohne den anderen zuzulassen.
Wenn Sie im Kontext eine Eigenschaft einer Klasse als öffentlich deklarieren, wird sie veränderbar, sodass sie von außerhalb der Klasse gelesen und geändert werden kann.
Mit dem Aufkommen der asymmetrischen Sichtbarkeit können Sie jetzt jedoch separate Bereiche für Lese- und Schreibeigenschaften definieren.
Das bedeutet, dass eine Eigenschaft in einem Kontext lesbar und in einem anderen beschreibbar sein kann, was eine bessere Kontrolle darüber bietet, wie auf Eigenschaften zugegriffen und diese geändert werden.
class Animal{ public private(set) string $name; public setName(string $foo){ $ths->name = $foo; } } $animal = new Animal(); echo $animal->name; // This will run correctly
Wir können eine Eigenschaft öffentlich machen lassen und die festgelegte Eigenschaft privat machen. Dies bedeutet, dass die Eigenschaft nicht außerhalb der Klasse aktualisiert werden kann und somit unveränderlich ist.
Wenn Sie versuchen, die Eigenschaft „$name“ zu ändern, wird eine Fehlermeldung angezeigt, dass Sie die Eigenschaft aufgrund des Sichtbarkeitsbereichs nicht ändern können.
Hier sind einige wichtige Punkte, die Sie zur asymmetrischen Sichtbarkeit beachten sollten:
Leerzeichen sind in der Set-Visibility-Deklaration nicht zulässig. private(set) ist korrekt. private( set ) ist nicht korrekt und führt zu einem Analysefehler.
Wenn eine Immobilie als öffentlich deklariert ist, kann die Hauptsichtbarkeit weggelassen werden. Beispielsweise verhalten sich „public private(set)“ und „private(set)“ identisch, da die öffentliche Sichtbarkeit impliziert ist.
Nur typisierte Eigenschaften dürfen eine separate Sichtbarkeit für Set-Operationen haben. Dies bedeutet, dass Sie in PHP keine asymmetrische Sichtbarkeit auf untypisierte Eigenschaften anwenden können.
Die festgelegte Sichtbarkeit muss mit der get-Sichtbarkeit identisch oder restriktiver sein. Beispielsweise sind public protected(set) und protected protected(set) gültig, aber protected public(set) führt zu einem Syntaxfehler.
Erfahren Sie mehr über die Sichtbarkeit von Asymmetrien, einschließlich anderer Beispiele zum Nachlesen.
Property Hook ist eine großartige Funktion von PHP 8.4, die Entwicklern die Möglichkeit bietet, Get- und Set-Direktiven direkt zu einer Variablen hinzuzufügen, ohne ausdrücklich Methoden zum Lesen und Schreiben der Variablen zu erstellen.
Alternativ können die magischen Methoden __get und __set verwendet werden, aber dadurch wird der Code ausführlicher, es können Fehler auftreten und statische Analysetools werden beschädigt.
Man kann mit Sicherheit sagen, dass das Design und die Syntax von Eigenschafts-Hooks denen von Kotlin ähneln, aber hauptsächlich von den Programmiersprachen C# und Swift beeinflusst werden.
In PHP 8.3 können wir eine Klasse mit einer Eigenschaft in ihrem Konstruktor erstellen, und sie gibt uns die Möglichkeit, die Eigenschaft zu lesen und zu schreiben.
class Animal{ public private(set) string $name; public setName(string $foo){ $ths->name = $foo; } } $animal = new Animal(); echo $animal->name; // This will run correctly
Das Problem bei diesem Ansatz besteht darin, dass wir, wenn wir uns entscheiden, in die Eigenschaft zu schreiben, entweder die magische Methode __set verwenden oder ausdrücklich eine Methode zum Mutieren der Variablen erstellen, was später zu einem Bruch in der Codebasis führen könnte.
Eigenschafts-Hooks ermöglichen es Entwicklern, sofort nach dem Erstellen der Eigenschaft eine Set-Direktive zu erstellen.
class Car { public function __construct(public string $model) { } }
Beachten Sie, dass der an die Set-Direktive übergebene Wert vom gleichen Typ wie die Eigenschaft sein muss, sonst wird ein Fehler ausgegeben.
Sie können der Set-Direktive einen anderen Typ übergeben und ihn in den richtigen Typ konvertieren, bevor Sie in die Eigenschaft schreiben, wie unten gezeigt:
class Car{ public string $model{ set (string $value) { if(strlen($value) === 0){ throw new ValueError("Model name cannot be empty"); } $this->model = $value; } } }
Das obige Beispiel zeigt, wie wir eine zusammengesetzte Typvariable sicher von der Set-Direktive empfangen und sie in den richtigen, durch die Eigenschaft definierten Typ analysieren können.
Sie können das an die Set-Direktive übergebene Argument weglassen, wenn es mit dem Eigenschaftstyp übereinstimmt. Beispielsweise sind die beiden folgenden Methoden gültig und verhalten sich ähnlich.
class Car{ public string $year{ set (string|number $value) { $year = intval($value); if($year < 2000){ throw new ValueError("We only accept cars produced in year 2000 and above"); } $this->year= $value; } } }
Beachten Sie, dass das Argument standardmäßig $value ist, wenn es weggelassen wird. Diese Syntax ist in Programmiersprachen wie Kotlin und C# üblich.
Vor dieser Funktion erforderte der Zugriff auf Mitglieder einer Klasse in PHP das Hinzufügen zusätzlicher Klammern um die Klasse.
// --------------------------METHOD 1---------------------------- public string $model{ set (string $value) { if(strlen($value) === 0){ throw new ValueError("Model name cannot be empty"); } $this->model = $value; } } // --------------------------METHOD 2---------------------------- public string $model{ set { if(strlen($value) === 0){ throw new ValueError("Model name cannot be empty"); } $this->model = $value; } }
Wenn Sie den neuen Car()-Aufruf nicht in Klammern setzen, erhalten Sie einen Analysefehler.
Die neue Syntax ermöglicht uns den Zugriff auf Methoden, Eigenschaften und Konstanten, ohne dass zusätzliche Klammern erforderlich sind.
class Car { public function getName(){ return "Toyota Camry"; } } $carName = (new Car())->getName();
Eine vollständige Aufschlüsselung dieser vorgeschlagenen Änderung finden Sie in den Details im RFC.
Neue Hilfsfunktionen kommen zu PHP 8.4.
Einige dieser Funktionen sind bereits in Laravel Arr oder Collection-Helfern implementiert.
Die Funktion array_find_key()
Die Funktion array_find_key($array, $callback) gibt den Schlüssel des ersten Elements zurück, für das die Methode $callback true zurückgibt. Wenn kein Element die Bedingung erfüllt, gibt die Funktion null zurück.
class Animal{ public private(set) string $name; public setName(string $foo){ $ths->name = $foo; } } $animal = new Animal(); echo $animal->name; // This will run correctly
Die Funktion array_find()
Die Funktion array_find_key() dient dazu, ein Array zu durchsuchen und den Schlüssel des ersten Elements zurückzugeben, das eine durch eine Rückruffunktion definierte Bedingung erfüllt.
Ähnlich wie array_find_key() gibt es null zurück, wenn kein passendes Element gefunden wird.
class Car { public function __construct(public string $model) { } }
Wenn keine Frucht im Array eine Menge größer als 10 hätte, würde die Funktion null zurückgeben.
Die Funktion array_any()
Die Funktion array_any() bestimmt, ob mindestens ein Element innerhalb eines Arrays ein bestimmtes Kriterium erfüllt, das durch eine bereitgestellte Bewertungsfunktion angegeben wird.
Wenn mindestens ein Element die Bedingung erfüllt, gibt die Funktion „true“ zurück; andernfalls wird false zurückgegeben.
class Car{ public string $model{ set (string $value) { if(strlen($value) === 0){ throw new ValueError("Model name cannot be empty"); } $this->model = $value; } } }
Wenn keine Zahl im Array größer als 10 ist, gibt die Funktion „false“ zurück.
Die Funktion array_all()
Die Funktion array_all() prüft, ob jedes einzelne Element in einem Array einen bestimmten Test besteht. Es wendet eine spezielle Regel (die Callback-Funktion) auf jedes Element an.
Wenn alle Elemente den Test gemäß der Regel bestehen, gibt array_all() true zurück.
class Car{ public string $year{ set (string|number $value) { $year = intval($value); if($year < 2000){ throw new ValueError("We only accept cars produced in year 2000 and above"); } $this->year= $value; } } }
In diesem Beispiel durchläuft die Funktion array_all() das Array $numbers und wendet die Rückruffunktion auf jedes Element an. Der Rückruf prüft, ob die Zahl durch 2 teilbar (also gerade) ist.
Da alle Zahlen im Array gerade sind, gibt die Funktion array_all() true zurück und die Meldung „Alle Zahlen sind gerade.“ wird angezeigt.
Wir haben die wichtigsten Verbesserungen untersucht, die in PHP 8.4 eingeführt wurden. Diese Updates bieten wertvolle Verbesserungen für Entwickler, einschließlich leistungsstarker neuer Funktionen und potenzieller Effizienzsteigerungen.
Um tiefer in alle Updates einzutauchen, einschließlich Beispielen und detaillierten Erklärungen, besuchen Sie die offizielle Seite mit der Ankündigung der Veröffentlichung von PHP 8.4.0.
Vergessen Sie nicht, die veralteten Versionen und Abwärtskompatibilitätsänderungen zu überprüfen, um einen reibungslosen Übergang zur neuesten Version zu gewährleisten.
Wenn Ihnen der Artikel gefallen hat, vergessen Sie nicht, ihn mit anderen zu teilen.
Ich würde gerne Ihre Gedanken hören – schreiben Sie unten einen Kommentar und lassen Sie uns das Gespräch am Laufen halten. Prost! ?
Folgen Sie mir für weitere PHP-, Node.js-, TypeScript- und PHP-Artikel! Sie können mich auch auf Twitter oder LinkedIn finden.
Das obige ist der detaillierte Inhalt vonPHP: Top-Funktionen und Verbesserungen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!