Rechercher une fonction PHP

match

(PHP 8)

Der match-Ausdruck verzweigt die Auswertung auf der Grundlage einer Identitätsprüfung eines Wertes. Ähnlich wie eine switch-Anweisung, hat ein match-Ausdruck ein Subjekt, welcher mit mehreren Fällen verglichen wird. Im Gegensatz zu switch ist der Vergleich typsicher (===) und nicht typschwache (==). Match-Ausdrücke sind ab PHP 8.0.0 verfügbar.

Beispiel #1 Struktur eines match-Ausdrucks

<?php
$return_value
= match (subjekt) {
einfacher_bedingter_ausdruck => rückgabe_ausdruck,
bedingter_ausdruck1, bedingter_ausdruck2 => rückgabe_ausdruck,
};
?>

Beispiel #2 Grundlegende Benutzung von match

<?php
$lebensmittel
= 'kuchen';

$return_value = match ($lebensmittel) {
'apfel' => 'Das Lebensmittel ist ein Apfel',
'schokolade' => 'Das Lebensmittel ist Schokolade',
'kuchen' => 'Das Lebensmittel ist ein Kuchen',
};

var_dump($return_value);
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

string(31) "Das Lebensmittel ist ein Kuchen"

Hinweis: Das Ergebnis eines match-Ausdrucks muss nicht verwendet werden.

Hinweis: Ein match-Ausdruck muss mit einem Semikolon ; abgeschlossen werden.

Der Ausdruck match ist ähnlich wie eine switch-Anweisung, hat aber einige wesentliche Unterschiede:

  • Ein match-Fall vergleicht Werte typsicher (===) statt typschwach, wie die switch-Anweisung.
  • Ein match-Ausdruck gibt einen Wert zurück.
  • match-Fälle fallen nicht auf spätere Fälle durch, so wie es switch-Fälle tun können.
  • Ein match-Ausdruck muss vollständig sein.

Wie switch-Anweisungen, werden match-Ausdrücke Fall für Fall ausgeführt. Zu Beginn wird kein Code ausgeführt. Die bedingten Ausdrücke werden nur ausgewertet, wenn alle vorherigen bedingten Ausdrücke nicht mit dem betreffenden Ausdruck übereinstimmen. Nur der Rückgabeausdruck, der dem passenden bedingten Ausdruck entspricht, wird ausgewertet. Ein Beispiel dafür:

<?php
$result
= match ($x) {
foo() => ...,
$this->bar() => ..., // $this->bar() wird nicht aufgerufen, wenn foo() === $x
$this->baz => beep(), // beep() wird nur aufgerufen, wenn $x === $this->baz
// etc.
};
?>

match-Bedingungen können mehrere Ausdrücke, die durch Kommata getrennt sind, enthalten. Diese Ausdrücke werden durch ein logisches ODER getrennt und sind ein Kürzel für mehrere match-Fälle, welche die gleiche rechte Seite haben.

<?php
$result
= match ($x) {
// Dieser Fall:
$a, $b, $c => 5,
// ist der gleiche Fall wie:
$a => 5,
$b => 5,
$c => 5,
};
?>

Ein Sonderfall ist die default-Klausel. Diese fängt alle Fälle ab, die nicht durch einen der anderen Fälle behandelt wurden. Zum Beispiel:

<?php
$expressionResult
= match ($condition) {
1, 2 => foo(),
3, 4 => bar(),
default =>
baz(),
};
?>

Hinweis: Mehrere default-Anweisungen erzeugen einen E_COMPILE_ERROR-Fehler.

Ein match-Ausdruck muss vollständig sein. Wenn die Bedingung von keinem Fall behandelt wird, wird eine UnhandledMatchError-Exception geworfen.

Beispiel #3 Beispiel für einen unbehandelten Vergleichsausdruck

<?php
$bedingung
= 5;

try {
match ($bedingung) {
1, 2 => foo(),
3, 4 => bar(),
};
} catch (\
UnhandledMatchError $e) {
var_dump($e);
}
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

object(UnhandledMatchError)#1 (7) {
  ["message":protected]=>
  string(33) "Unhandled match value of type int"
  ["string":"Error":private]=>
  string(0) ""
  ["code":protected]=>
  int(0)
  ["file":protected]=>
  string(9) "/in/ICgGK"
  ["line":protected]=>
  int(6)
  ["trace":"Error":private]=>
  array(0) {
  }
  ["previous":"Error":private]=>
  NULL
}

Verwendung von Ausdrücken zur Handhabung von Nicht-Vergleichsprüfungen

Es ist möglich, einen match-Ausdruck zu verwenden, um nicht-vergleichende Fälle zu behandeln, indem true als Bedingung verwendet wird.

Beispiel #4 Prüfung von ganzzahligen Bereichen

<?php

$alter
= 23;

$result = match (true) {
$alter >= 65 => 'Senior',
$alter >= 25 => 'Erwachsener',
$alter >= 18 => 'Junger Erwachsener',
default =>
'Kind',
};

var_dump($result);
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

string(18) "Junger Erwachsener"

Beispiel #5 Prüfung eines Textes auf enthaltene Zeichenfolgen

<?php

$text
= 'Bienvenue chez nous';

$result = match (true) {
str_contains($text, 'Welcome') || str_contains($text, 'Hello') => 'en',
str_contains($text, 'Bienvenue') || str_contains($text, 'Bonjour') => 'fr',
// ...
};

var_dump($result);
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

string(2) "fr"
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-control-structures.match.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