Neue Funktionen von PHP8.1 erklärt Enums-Aufzählung
Nov 10, 2021 pm 03:09 PMDieser Artikel ist übersetzt, Originaladresse: https://stitcher.io/blog/php-enums
PHP 8.1: Aufzählungen
Sie sind endlich da – integrierte Unterstützung für Aufzählungen wird in PHP hinzugefügt 8.1-Unterstützung! Manche denken vielleicht, sie hätten das schon vor langer Zeit tun sollen, aber Sie haben meine Beschwerde nicht gehört. Ich bin froh, dass sie es getan haben! Dieser Artikel ist einem detaillierten Einblick in die neu hinzugefügten Funktionen gewidmet.
Wie in meinen Beiträgen zu PHP-Funktionen üblich, beginnen wir mit einem allgemeinen Überblick darüber, wie Aufzählungen aussehen:
1 2 3 4 5 6 |
|
Das Gute an Aufzählungen ist, dass sie eine Reihe konstanter Werte darstellen, aber am wichtigsten ist, dass diese Werte dies können be Geben Sie es so ein:
1 2 3 4 5 6 |
|
In diesem Beispiel sieht das Erstellen einer Enumeration und deren Übergabe an aBlogPost so aus:
1 |
|
Das sind die Grundlagen, und wie Sie sehen, sind sie überhaupt nicht kompliziert. Obwohl es noch viele Randnotizen zu machen gibt, werfen wir einen genaueren Blick auf Aufzählungen!
#Aufzählungsmethoden
Aufzählungen können Methoden definieren, genau wie Klassen. Dies ist eine sehr leistungsstarke Funktion, insbesondere in Kombination mit dem Match-Operator:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
Methoden können wie folgt verwendet werden:
1 2 |
|
Statische Methoden sind ebenfalls zulässig:
1 2 3 4 5 6 7 8 9 |
|
Sie können self auch in einer Aufzählung verwenden:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
# Aufzählungsschnittstelle
Aufzählungen können Schnittstellen implementieren, genau wie normale Klassen:
1 2 3 4 5 6 7 8 9 10 11 12 |
|
# Aufzählungswerte – auch bekannt als „unterstützte Aufzählungen“
Aufzählungswerte werden intern durch Objekte dargestellt, Sie können jedoch Werte zuweisen bei Bedarf; dies ist nützlich für z.B. Serialisieren Sie sie in die Datenbank.
1 2 3 4 5 6 |
|
Achten Sie auf die Typdeklaration in der Aufzählungsdefinition. Es zeigt an, dass alle Aufzählungswerte zum angegebenen Typ gehören. Sie können es auch zu einem int machen. Beachten Sie, dass nur int und string als Aufzählungswerte zulässig sind.
1 2 3 4 5 6 |
|
Der Fachbegriff für Typ-Enums wird „Backed Enums“ genannt, weil sie durch einfachere Werte „unterstützt“ werden. Wenn Sie sich entscheiden, einen Aufzählungswert zuzuweisen, sollten alle Fälle einen Wert haben. Man kann sie nicht kombinieren. Aufzählungen ohne „Backup“ werden „reine Aufzählungen“ genannt.
#Unterstützte Aufzählungen mit Schnittstellen
Wenn Sie eine unterstützte Aufzählung mit einer Schnittstelle verwenden, muss der Aufzählungstyp direkt nach dem Aufzählungsnamen und vor dem Schlüsselwort „implements“ stehen.
1 2 3 4 5 6 7 8 |
|
#Serialisierung unterstützte Aufzählungen
Wenn Sie Aufzählungsfällen Werte zuweisen möchten, benötigen Sie möglicherweise eine Möglichkeit, diese zu serialisieren und zu deserialisieren. Wenn Sie sie serialisieren, benötigen Sie eine Möglichkeit, auf die Enum-Werte zuzugreifen. Dies erfolgt über eine schreibgeschützte öffentliche Eigenschaft:
1 |
|
Die Enumeration kann aus dem Wert wiederhergestellt werden mit: Enum::from
1 |
|
Es gibt auch ein tryFrom, das null zurückgibt, wenn ein unbekannter Wert übergeben wird. Eine Ausnahme gibt es, wenn Sie from verwenden.
1 2 |
|
Bitte beachten Sie, dass Sie die integrierten Serialisierungs- und Deserialisierungsfunktionen auch für Aufzählungen verwenden können. Darüber hinaus können Sie json_encode mit einer unterstützten Aufzählung verwenden und das Ergebnis ist ein Aufzählungswert. Dieses Verhalten kann durch die Implementierung von JsonSerializable überschrieben werden.
#Enumerationswerte auflisten
Sie können eine Liste aller verfügbaren Fälle in einer Enumeration mit der statischen Methode erhalten: Enum::cases()
1 2 3 4 5 6 |
|
Beachten Sie, dass dieses Array das eigentliche Enumerationsobjekt enthält:
1 2 3 4 |
|
#Aufzählungen sind Objekte
Ich habe bereits erwähnt, dass Aufzählungswerte als Objekte dargestellt werden, tatsächlich handelt es sich um Singleton-Objekte. Das bedeutet, dass Sie sie wie folgt vergleichen können:
1 2 3 4 5 6 |
|
#Enums als Array-Schlüssel
Da Enum-Werte tatsächlich Objekte sind, können Sie sie derzeit nicht als Array-Schlüssel verwenden. Folgendes führt zu einem Fehler:
1 2 3 4 |
|
Es gibt einen RFC zur Änderung dieses Verhaltens, über den jedoch noch nicht abgestimmt wurde.
Das bedeutet, dass Sie Aufzählungen nur als Schlüssel in SplObjectStorage und WeakMaps verwenden können.
#Traits
Aufzählungen können Merkmale wie Klassen verwenden, jedoch mit mehr Einschränkungen. Das Überschreiben integrierter Aufzählungsmethoden ist nicht zulässig und sie dürfen keine Klassenattribute enthalten – ihre Verwendung in Aufzählungen ist verboten.
#Reflection und Eigenschaften
Wie erwartet wurden einige Reflection-Klassen zur Verarbeitung von Aufzählungen hinzugefügt: ReflectionEnum, ReflectionEnumUnitCase und ReflectionEnumBackedCase. Es gibt auch eine neue Funktion enum_exists, die genau das tut, was ihr Name vermuten lässt.
Genau wie normale Klassen und Attribute können Aufzählungen und ihre Fälle mithilfe von Attributen annotiert werden. Beachten Sie, dass der TARGET_CLASS-Filter auch Aufzählungen enthält.
Eine letzte Sache: Die Aufzählung hat auch eine schreibgeschützte Eigenschaft. Der RFC erwähnt, dass es sich dabei um ein Implementierungsdetail handelt und nur zu Debugzwecken verwendet werden sollte. Aber es ist trotzdem erwähnenswert. $enum->name
Das obige ist der detaillierte Inhalt vonNeue Funktionen von PHP8.1 erklärt Enums-Aufzählung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heißer Artikel

Hot-Tools-Tags

Heißer Artikel

Heiße Artikel -Tags

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

So fügen Sie PHP8 eine MySQL-Erweiterung hinzu

Was ist der Unterschied zwischen PHP5 und PHP8?

Detaillierte grafische Erläuterung der Installations- und Konfigurationsmethode von Apache2.4+php8.0

So stellen Sie eine Verbindung zur Datenbank in PHP8 her

Welche Leistungsverbesserungen bietet PHP8?

Ein detaillierter Blick auf JIT in PHP 8
