Introduction
On peut voir les fonctions comme des usines qui attendent des entrants (les arguments), les stockent dans des conteneurs (les paramètres), traitent ces entrants et renvoient (ou pas) un résultat.
Schéma explicatif des fonctions :
Les fonctions permettent :
- d'éviter de répéter inutilement du code
- d'opérer des traitements en prenant éventuellement des valeurs en paramètre
- s'il y a des crochets [], c'est que le paramètre est optionnel)
- mixed indique que le retour pourra être de type différent selon les cas
- de renvoyer le cas échéant une valeur (void indique qu'il n'y aura pas de valeur de retour)
Nommage d'une fonction : même convention que les variables (lettres, chiffres, underscore).
Une fonction s'appelle avec ou sans arguments.
La signature d'une fonction permet de l'identifier, de savoir ce qu'elle attend en paramètre et si elle renvoie une valeur.
Ex : strlen ( string $string
) : int
- la fonction a pour nom strlen
- elle attend en paramètre un chaîne de caractères
- elle retourne un entier
Return
Comme dit précédemment, une fonction peut retourner ou pas une valeur. Attention, dès qu'une valeur est retournée, l'exécution de la fonction s'arrête.
Passage de paramètre par référence ou par valeur
Par défaut, les paramètres sont passés par valeur, c'est à dire que l'argument intitial n'est pas impacté, seule sa valeur est copiée.
On dit que la fonction est "immuable" ou "immutable" car elle ne modifie pas les valeurs passées en argument.
Cependant, si vous voyez un "&" avant le paramètre attendu, cela veut dire que c'est une référence vers l'argument qui sera passée. Si la fonction modifie le paramètre, l'argument le sera aussi !
Ex : array_push ( array &$array [, mixed $... ] ) : int
array_push va ajouter un ou plusieurs éléments à la fin du tableau passé en argument par référence. Le tableau sera donc directement modifié. Par ailleurs, array_push renvoie un entier qui est le nombre total d'éléments dans le tableau.
Création d'une fonction et conversion des types de paramètre
function addition(int $a, int $b):int { return $a + $b; } $result = addition(2, 5.8); echo $result;
Que va afficher le code ci-dessus ?
Pour empêcher la conversion automatique de type, il faudra ajouter l'instruction :
declare(strict_types=1);
Il est possible d'indiquer que l'on attend en paramètre un type de données précis ou null. Ex :
function test (?string a = null) {// code ici};
Fonction anonyme
Comme son nom l'indique, une fonction anonyme est une fonction qui n'a pas de nom !
Les fonctions anonymes servent souvent dans les "callbacks", c'est à dire que la fonction anonyme est passée en arguement à une autre fonction.
Ex :
<?php echo preg_replace_callback('~-([a-z])~', function ($match) { return strtoupper($match[1]); }, 'hello-world'); // outputs helloWorld
Plus d'informations sur les fonctions anonymes
Fonctions variables
Il peut parfois être nécessaire d'appeler une fonction sans que l'on connaisse directement son nom mais que celui ci est stocké dans une variable.
Ex :
function helloWorld() { echo "Hello World"; } $ma_variable = 'helloWorld'; $ma_variable(); // appelle helloWorld()