Rechercher une fonction PHP

match

(PHP 8)

L'expression match permet d'effectuer une évaluation basée sur le contrôle d'identité d'une valeur. De la même manière qu'une instruction switch, une expression match a une expression sujet qui est comparée à plusieurs alternatives. Contrairement à switch, elle s'évalue à une valeur, comme les expressions ternaires. Contrairement à switch, la comparaison est une vérification d'identité (===) plutôt qu'un contrôle d'égalité faible (==). Les expressions Match sont disponibles à partir de PHP 8.0.0.

Exemple #1 Structure d'une expression match

<?php
$return_value
= match (subject_expression) {
single_conditional_expression => return_expression,
conditional_expression1, conditional_expression2 => return_expression,
};
?>

Exemple #2 Utilisation de base des expressions match

<?php
$food
= 'cake';

$return_value = match ($food) {
'apple' => 'This food is an apple',
'bar' => 'This food is a bar',
'cake' => 'This food is a cake',
};

var_dump($return_value);
?>

L'exemple ci-dessus va afficher :

string(19) "This food is a cake"

Note: Le résultat d'une expression match n'a pas besoin d'être utilisé.

Note: Une expression match doit être terminée par un point-virgule ;.

L'expression match est similaire à une instruction switch mais présente quelques différences essentielles:

  • Une expression match compare les valeurs de manière stricte (===) et non de manière faible comme le fait l'instruction switch.
  • Une expression match renvoie une valeur.
  • Les expressions match ne passent pas aux cas suivants comme le font les les instructions switch.
  • Une expression match doit être exhaustive.

Comme les instructions switch, les expressions match sont exécutées bras par bras. Au début, aucun code n'est exécuté. Les expressions conditionnelles ne sont évaluées que si toutes les expressions conditionnelles précédentes ne correspondent pas à l'expression de l'objet. Seule l'expression de retour correspondant à l'expression conditionnelle correspondante sera évaluée. Par exemple :

<?php
$result
= match ($x) {
foo() => ...,
$this->bar() => ..., // $this->bar() n'est pas appelé si foo() === $x
$this->baz => beep(), // beep() n'est pas appelé sauf si $x === $this->baz
// etc.
};
?>

Les bras de l'expression de match peuvent contenir plusieurs expressions séparées par une virgule. Il s'agit d'un OU logique et d'une abréviation pour plusieurs bras qui utilisent la même expression comme résultat.

<?php
$result
= match ($x) {
// Ce bras
$a, $b, $c => 5,
// Est équivalent à ces trois bras :
$a => 5,
$b => 5,
$c => 5,
};
?>

Le motif default est un cas particulier. Ce motif correspond à tout ce qui n'a pas été recherché précédemment. Par exemple :

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

Note: L'utilisation de plusieurs motifs par défaut entraînera une erreur E_FATAL_ERROR.

Une expression match doit être exhaustive. Si l'expression n'est traitée par aucun bras de match, une erreur UnhandledMatchError est lancée.

Exemple #3 Exemple d'une expression match non gérée

<?php
$condition
= 5;

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

L'exemple ci-dessus va afficher :

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
}

Utilisation d'expressions match pour gérer les contrôles de non-identité

Il est possible d'utiliser une expression match pour traiter les cas conditionnels de non-identité en utilisant true comme expression sujet.

Exemple #4 Utilisation d'une expression match généralisée pour effectuer des branchements sur des plages d'entiers

<?php

$age
= 23;

$result = match (true) {
$age >= 65 => 'senior',
$age >= 25 => 'adult',
$age >= 18 => 'young adult',
default =>
'kid',
};

var_dump($result);
?>

L'exemple ci-dessus va afficher :

string(11) "young adult"

Exemple #5 Utilisation d'une expression match généralisée pour effectuer des branchements sur le contenu d'une chaîne de caractères

<?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);
?>

L'exemple ci-dessus va afficher :

string(2) "fr"
Rechercher une fonction PHP

Version en cache

06/11/2024 04:18:31 Cette version de la page est en cache (à la date du 06/11/2024 04:18:31) afin d'accélérer le traitement. Vous pouvez activer le mode utilisateur dans le menu en haut pour afficher la dernère version de la page.

Document créé le 30/01/2003, dernière modification le 26/10/2018
Source du document imprimé : https://www.gaudry.be/php-rf-control-structures.match.html

L'infobrol est un site personnel dont le contenu n'engage que moi. Le texte est mis à disposition sous licence CreativeCommons(BY-NC-SA). Plus d'info sur les conditions d'utilisation et sur l'auteur.

Références

  1. Consulter le document html Langue du document :fr Manuel PHP : http://php.net

Ces références et liens indiquent des documents consultés lors de la rédaction de cette page, ou qui peuvent apporter un complément d'information, mais les auteurs de ces sources ne peuvent être tenus responsables du contenu de cette page.
L'auteur de ce site est seul responsable de la manière dont sont présentés ici les différents concepts, et des libertés qui sont prises avec les ouvrages de référence. N'oubliez pas que vous devez croiser les informations de sources multiples afin de diminuer les risques d'erreurs.

Table des matières Haut