Rechercher une fonction PHP

Aufzählungen und Methoden

Enums (sowohl Pure Enums als auch Backed Enums) können Methoden enthalten und Schnittstellen implementieren. Wenn eine Enum eine Schnittstelle implementiert, dann akzeptiert eine Typüberprüfung für diese Schnittstelle auch alle Fälle dieser Enum.

<?php
interface Colorful
{
public function
color(): string;
}

enum Suit implements Colorful
{
case
Hearts;
case
Diamonds;
case
Clubs;
case
Spades;

// Erfüllt die Schnittstellenvereinbarung
public function color(): string
{
return
match($this) {
Suit::Hearts, Suit::Diamonds => 'Red',
Suit::Clubs, Suit::Spades => 'Black',
};
}

// Nicht Teil der Schnittstelle; das ist OK
public function shape(): string
{
return
"Rectangle";
}
}

function
paint(Colorful $c) { ... }

paint(Suit::Clubs); // funktioniert

print Suit::Diamonds->shape(); // gibt "Rectangle" aus
?>

In diesem Beispiel haben alle vier Instanzen von Suit zwei Methoden: color() und shape(). In Bezug auf den aufrufenden Code und die Überprüfung des Typs verhalten sie sich genau wie jede andere Objektinstanz.

Bei einer Backed Enum erfolgt die Deklaration der Schnittstelle nach der Deklaration des zugehörigen Typs.

<?php
interface Colorful
{
public function
color(): string;
}

enum Suit: string implements Colorful
{
case
Hearts = 'H';
case
Diamonds = 'D';
case
Clubs = 'C';
case
Spades = 'S';

// Erfüllt die Schnittstellenvereinbarung
public function color(): string
{
return
match($this) {
Suit::Hearts, Suit::Diamonds => 'Red',
Suit::Clubs, Suit::Spades => 'Black',
};
}
}
?>

Innerhalb einer Methode wird die Variable $this definiert, die sich auf die Case-Instanz bezieht.

Die Methoden können beliebig komplex sein, geben aber in der Praxis normalerweise einen statischen Wert zurück oder ein match (Übereinstimmung) auf $this, um für verschiedene Fälle verschiedene Ergebnisse zu liefern.

In diesem Fall wäre es für die Datenmodellierung besser, auch einen Enum-Typ SuitColor mit den Werten Red und Black zu definieren und stattdessen diesen zurückzugeben, aber das würde dieses Beispiel verkomplizieren.

Die obige Hierarchie ähnelt logisch der folgenden Klassenstruktur (obwohl dies nicht der tatsächlich ausgeführte Code ist):

<?php
interface Colorful
{
public function
color(): string;
}

final class
Suit implements UnitEnum, Colorful
{
public const
Hearts = new self('Hearts');
public const
Diamonds = new self('Diamonds');
public const
Clubs = new self('Clubs');
public const
Spades = new self('Spades');

private function
__construct(public readonly string $name) {}

public function
color(): string
{
return
match($this) {
Suit::Hearts, Suit::Diamonds => 'Red',
Suit::Clubs, Suit::Spades => 'Black',
};
}

public function
shape(): string
{
return
"Rectangle";
}

public static function
cases(): array
{
// Unzulässige Methode, weil bei einer Enum keine benutzerdefinierte case()-Methode erlaubt ist.
// Siehe auch Abschnitt "Werteliste".
}
}
?>

Methoden können public, private oder protected sein, wobei private und protected praktisch gleichwertig sind, da Vererbung nicht erlaubt ist.

Finde eine PHP-Funktion

Deutsche Übersetzung

Sie haben gebeten, diese Seite auf Deutsch zu besuchen. Momentan ist nur die Oberfläche übersetzt, aber noch nicht der gesamte Inhalt.

Wenn Sie mir bei Übersetzungen helfen wollen, ist Ihr Beitrag willkommen. Alles, was Sie tun müssen, ist, sich auf der Website zu registrieren und mir eine Nachricht zu schicken, in der Sie gebeten werden, Sie der Gruppe der Übersetzer hinzuzufügen, die Ihnen die Möglichkeit gibt, die gewünschten Seiten zu übersetzen. Ein Link am Ende jeder übersetzten Seite zeigt an, dass Sie der Übersetzer sind und einen Link zu Ihrem Profil haben.

Vielen Dank im Voraus.

Dokument erstellt 30/01/2003, zuletzt geändert 26/10/2018
Quelle des gedruckten Dokuments:https://www.gaudry.be/de/php-rf-language.enumerations.methods.html

Die Infobro ist eine persönliche Seite, deren Inhalt in meiner alleinigen Verantwortung liegt. Der Text ist unter der CreativeCommons-Lizenz (BY-NC-SA) verfügbar. Weitere Informationen auf die Nutzungsbedingungen und dem Autor.

Referenzen

  1. Zeigen Sie - html-Dokument Sprache des Dokuments:fr Manuel PHP : http://php.net

Diese Verweise und Links verweisen auf Dokumente, die während des Schreibens dieser Seite konsultiert wurden, oder die zusätzliche Informationen liefern können, aber die Autoren dieser Quellen können nicht für den Inhalt dieser Seite verantwortlich gemacht werden.
Der Autor Diese Website ist allein dafür verantwortlich, wie die verschiedenen Konzepte und Freiheiten, die mit den Nachschlagewerken gemacht werden, hier dargestellt werden. Denken Sie daran, dass Sie mehrere Quellinformationen austauschen müssen, um das Risiko von Fehlern zu reduzieren.

Inhaltsverzeichnis Haut