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 : 

fonction

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 ?

7 car php va convertir implicitement le nombre décimal en entier (5.8 devient 5) sans lancer d'exception.
 

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()

Documentation

Documentation sur php.net

Documentation spécifiques aux fonctions variables

Documentation sur les références des fonctions existantes