Menu

Fonctions PHP : définir, return, paramètres et types

Définissez une fonction PHP avec function name($param) { return $value; }. Valeurs de retour, paramètres par défaut, arguments nommés, passage par référence, déclarations de type avec strict_types, types nullables et union, et ...$args variadique.

Cette page contient des éditeurs exécutables - modifiez, exécutez et voyez la sortie instantanément.

Une fonction PHP se définit avec le mot-clé function, un nom, une liste de paramètres et un corps ; return renvoie une valeur à l'appelant. function add(int $a, int $b): int { return $a + $b; } la définit, et add(2, 3) l'appelle et renvoie 5.

Les string et int devant les paramètres sont des déclarations de type, et : string après les parenthèses est le type de retour. Les deux sont facultatifs, mais ils détectent les erreurs tôt et documentent ce qu'attend la fonction.

Valeurs de retour et renvoi de plusieurs valeurs

return termine immédiatement la fonction. Une fonction sans return, ou avec un simple return;, renvoie null ; déclarez : void quand elle n'est appelée que pour son effet. Une fonction renvoie une seule valeur, mais cette valeur peut être un tableau, que vous déstructurez du côté de l'appel :

Voir la déstructuration de tableau pour les autres formes de [...] =.

Paramètres par défaut et arguments nommés

Un paramètre avec = value est facultatif : l'appelant peut l'omettre. Les paramètres facultatifs se placent après les obligatoires. Depuis PHP 8.0, les arguments nommés permettent à l'appelant de passer n'importe quel paramètre par son nom, et donc de sauter les facultatifs dont il n'a pas besoin.

Les arguments nommés rendent aussi lisibles les appels aux fonctions natives : str_pad('7', 3, '0', pad_type: STR_PAD_LEFT). Le nom du paramètre fait alors partie de l'interface publique de la fonction, donc renommer un paramètre peut casser les appels qui utilisent les noms.

Passage par référence

Normalement, PHP passe une copie de chaque argument, donc la fonction ne peut pas modifier la variable de l'appelant. Un & devant un paramètre passe la variable elle-même. Les fonctions natives comme sort() fonctionnent ainsi.

Renvoyer une nouvelle valeur est généralement plus clair que modifier un argument. Utilisez les références quand la fonction doit vraiment modifier quelque chose sur place.

Déclarations de type et strict_types

Par défaut, PHP convertit les arguments vers le type déclaré quand il le peut : add("5", 3) transforme "5" en 5. Placer declare(strict_types=1); tout en haut du fichier désactive cela pour les appels faits dans ce fichier, si bien qu'un mauvais type lève une TypeError au lieu d'être converti.

Sans la ligne declare, le même appel affiche 8. Les chaînes qui ne sont pas des nombres, comme "five", lèvent une TypeError dans les deux modes.

Les types que vous pouvez déclarer pour les paramètres et les valeurs de retour :

never est un type de retour pour les fonctions qui lèvent toujours une exception ou terminent le script. Les noms de classes et d'interfaces fonctionnent aussi comme types.

Nombre variable d'arguments avec ...$args

...$numbers rassemble un nombre quelconque d'arguments dans un tableau. Le même ... du côté de l'appel décompose un tableau en arguments séparés.

Utiliser une variable extérieure dans une fonction

Une fonction a sa propre portée. Une variable définie hors d'elle n'est pas visible à l'intérieur, ce qui surprend ceux qui viennent de JavaScript :

<?php
$taxRate = 0.2;

function priceWithTax(float $price): float
{
    return $price * (1 + $taxRate);   // $taxRate is undefined here
}
Warning: Undefined variable $taxRate in /path/to/index.php on line 6

et la fonction renvoie le prix hors taxes. Passez plutôt la valeur en paramètre. La fonction indique ainsi honnêtement ce dont elle dépend et reste facile à tester :

Le mot-clé global fonctionne aussi, mais cache la dépendance ; la portée des variables en parle. Pour les fonctions courtes passées à d'autres fonctions, comme les callbacks d'array_map(), voir les fonctions anonymes, qui peuvent capturer des variables extérieures avec use.

Questions fréquentes

Comment définir une fonction en PHP ?

Utilisez le mot-clé function, un nom, des paramètres entre parenthèses et un corps : function add(int $a, int $b): int { return $a + $b; }. Appelez-la avec add(2, 3). Les noms de fonctions ne sont pas sensibles à la casse, et une fonction définie au niveau principal d'un fichier peut être appelée avant la ligne qui la définit.

Comment renvoyer plusieurs valeurs depuis une fonction PHP ?

Renvoyez un tableau et déstructurez-le : function minMax(array $a): array { return [min($a), max($a)]; } puis [$min, $max] = minMax([3, 1, 4]);. Pour des résultats nommés, renvoyez un tableau associatif et utilisez ['min' => $min] = ....

Que fait declare(strict_types=1) ?

Il désactive la conversion automatique de type pour les appels faits depuis ce fichier, donc passer "5" à un paramètre int lève une TypeError au lieu de le convertir en 5. Ce doit être la toute première instruction du fichier, et il n'affecte que ce fichier.

Que sont les arguments nommés en PHP ?

Depuis PHP 8.0, vous pouvez passer des arguments par nom de paramètre : htmlspecialchars($s, double_encode: false). Ils peuvent être donnés dans n'importe quel ordre après les arguments positionnels, et permettent de sauter les paramètres facultatifs que vous ne voulez pas changer.

Comment passer une variable par référence en PHP ?

Placez & devant le paramètre : function addOne(int &$n): void { $n++; }. La fonction modifie alors la variable de l'appelant. Sans &, PHP passe une copie et la variable de l'appelant ne change pas.

Illustration des langages de programmation de Coddy

Apprendre à coder avec Coddy

COMMENCER