Les fonctions

Les fonctions

2 mai 2021

Les fonctions sont très importantes en développement et évidemment, sont très utiles ! Les fonctions permettent de stocker du code sous un nom afin de l'exécuter plus tard.

Une fonction PHP commence toujours par le mot-clé function, suivi du nom de la fonction et enfin de parenthèses collées au nom. Le nom est libre, bien entendu. Par souci de propreté, on utilisera le "camelCase" pour son écriture.

Pour terminer, ouvrez et fermez des accolades :

function nomDeMaFonction() {
  // Insérez le code que vous souhaitez exécuter à l'appel de cette fonction. 
  echo 'Hello le monde !';
}

Pour appeler la fonction, utilisez le nom de celle-ci suivi des parenthèses :

nomDeMaFonction();

Jusque-là, il n'y a rien de plus simple.

Passer des valeurs

Il est tout à fait possible de passer des valeurs dans une fonction. Pour cela, écrivez des noms de variables entre les parenthèses de la fonction. Ces variables sont ce que l'on appelle des arguments et doivent être séparées par des virgules si vous en avez plusieurs.

function bonjour($prenom, $nom) {
  echo "Bonjour $prenom $nom";
}

Au moment de l'appel à la fonction, passez vos valeurs entre les parenthèses. Dans la fonction bonjour(), la valeur "Jane" sera affectée à $prenom, "Doe" sera affectée $nom.

bonjour('Jane', 'Doe');

// Résultat
Bonjour Jane Doe

Passer des arguments par référence

Par défaut, les arguments passés le sont par valeur, c'est-à-dire que sa valeur n'est pas changée à l'extérieur de la fonction. Si vous voulez changer cette valeur en dehors de la fonction, il suffit d'ajouter le sigle & devant l'argument.

function ajouteUnTexte(&$phrase) {
    $phrase .= ', oui nous pouvons...';
}

$value = 'Nous pouvons le faire';
ajouteUnTexte($value);
echo $value;

Retour de valeur

Dans l'idéal, une fonction n'affiche pas une valeur, mais la retourne. Créons une fonction qui retourne une chaîne de caractères en minuscule :

function minuscule($valeur) {
  return strtolower($valeur);
}

Ce qui donnera :

$string = minuscule('BonJour Les AmiEs');
echo $string; // Résultat : bonjour les amies

Une fonction dans une variable

Il est aussi possible de créer des fonctions sans nom dont la valeur de retour sera directement stockée dans une variable. Une seule valeur doit être retournée :

$total = function($a, $b) {
  return $a + $b;
}

Son utilisation sera semblable à celle d'une fonction à une petite différence près :

echo $total(5, 5); // Résultat : 10

Typer les arguments

Comment ça "typer" les arguments ? Il est possible de déclarer les types des arguments et valeur de retour. Cela permet d'assurer que les types de données voulues est respecté, sinon une erreur de TypeError sera retournée.

Devant chaque argument de la fonction, on donnera le type de données que l'on souhaite recevoir :

function donneesUtilisateur(array $donnees, int $nombre): bool {
  // ...
  return true;
}

Dans ce cas de figure, nous devons fournir une donnée de type array et int.

Si jamais on désire que la variable $number puisse recevoir un type int, mais également un type null, nous pouvons le spécifier de deux manières différentes : la première est de poser un ? devant le type, ou alors de préciser le second type directement.

// Précise via un '?'
function donneesUtilisateur(array $donnees, ?int $nombre): bool {
  // ...
  return true;
}

// Précise le type NULL
function donneesUtilisateur(array $donnees, int|null $nombre): bool {
  // ...
  return true;
}

Il en va de même pour le retour, je retourne potentiellement un booléen ou null:

// Précise via un '?' dans le retour
function donneesUtilisateur(...): ?bool {
  // ...
  return true;
}

// Précise le type NULL dans le retour
function donneesUtilisateur(...): bool|null {
  // ...
  return null;
}

Dans le cas où votre fonction retourne toutes sortes de type différents, vous pouvez utiliser le type mixed, équivalent à object|resource|array|string|int|float|bool|null et disponible à partir de PHP 8.0.0.

Les arguments nommés

Depuis PHP 8.0.0, les arguments nommés viennent rendre l'ordre du passage des valeurs aux arguments obsolète ! Jusqu'à maintenant, on recommande de placer les arguments optionnels en dernières positions.

Avec les arguments nommés, l'ordre n'a plus vraiment d'importance. Le nom du paramètre devient un identifiant permettant de viser l'argument auquel passer sa valeur.

function argumentsNommes(int $fin = 10, int $debut, int $interval = 2) {
  // ...
}

// Les arguments nommés appellent les arguments dans l'ordre voulus 
argumentsNommes(debut: 2, interval: 5, fin: 35)