return
et apprendre à l’utiliser pour retourner le résultat d’une fonction.
Avantages et spécificités de l’instruction return
Jusqu’à présent, le seul moyen que nous avions d’avoir accès au résultat d’une fonction qu’on avait créée était d’afficher ce résultat en utilisant un echo
dans la définition de la fonction lors de sa création.
Le problème de cette méthode est que nous n’avons aucun contrôle sur le résultat de la fonction : dès que l’on appelle la fonction en question, le echo
à l’intérieur est exécuté et le résultat est immédiatement affiché.
La structure de contrôle return
va nous permettre de demander à une fonction de retourner un résultat qu’on va ensuite pouvoir stocker dans une variable ou autre pour le manipuler.
Cela va être utile dans de nombreux cas puisqu’on voudra souvent récupérer le résultat d’une fonction pour effectuer d’autres calculs ou d’autres opérations avec celui-ci dans un script plutôt que simplement l’afficher.
Attention cependant : l’instruction return
va terminer l’exécution d’une fonction, ce qui signifie qu’on placera généralement cette instruction en fin de fonction puisque le code suivant une instruction return
dans une fonction ne sera jamais lu ni exécuté.
Pour illustrer cela, créons deux fonctions dont le rôle est de multiplier deux nombres entre eux et de renvoyer le résultat de la multiplication. La première fonction va utiliser un echo
, la seconde utilisera plutôt return
.
<!DOCTYPE html> <html> <head> <title>Cours PHP & MySQL</title> <meta charset="utf-8"> <link rel="stylesheet" href="cours.css"> </head> <body> <h1>Titre principal</h1> <?php /*Note : l'opérateur "*" a une priorité plus grande que "." *pas besoin de () ici donc pour faire le calcul*/ function multecho(float $a, float $b){ echo $a. ' * ' .$b. ' = ' .$a * $b. '<br>'; } function multreturn(float $a, float $b){ return $a. ' * ' .$b. ' = ' .$a * $b. '<br>'; } multecho(2, 3); multreturn(4, 5); ?> <p>Un paragraphe</p> </body> </html>
Ici, on utilise un echo
pour afficher le résultat dans notre fonction multecho()
. Le echo
s’exécute lors de l’appel à la fonction et résultat est donc affiché immédiatement après l’appel à notre fonction. Ici, nous n’avons aucun contrôle sur le résultat puisque celui-ci est affiché automatiquement.
En revanche, on utilise return
pour simplement retourner le résultat de notre fonction multreturn()
. Ici, le résultat n’est pas affiché, il est simplement retourné par la fonction.
Cela explique le fait qu’aucun résultat ne s’affiche lorsqu’on appelle notre fonction multreturn()
. Le résultat a bien été calculé et a bien été retourné, mais il attend qu’on en fasse quelque chose.
On va alors pouvoir placer ce résultat dans une variable pour ensuite l’utiliser pour effectuer différents calculs ailleurs dans notre script.
<!DOCTYPE html> <html> <head> <title>Cours PHP & MySQL</title> <meta charset="utf-8"> <link rel="stylesheet" href="cours.css"> </head> <body> <h1>Titre principal</h1> <?php /*Note : l'opérateur "*" a une priorité plus grande que "." *pas besoin de () ici donc pour faire le calcul*/ function multecho(float $a, float $b){ echo $a. ' * ' .$b. ' = ' .$a * $b. '<br>'; } function multreturn(float $a, float $b){ return $a * $b; } multecho(2, 3); //On exécute multreturn() et on place le résultat dans $res $res = multreturn(4, 5); echo $res+= 2; ?> <p>Un paragraphe</p> </body> </html>
Ici, notre fonction multreturn ()
retourne le résultat de la multiplication de deux nombres. On place la valeur retournée dans une variable $res
. On ajoute 2 à cette variable et on affiche le résultat final. Les opérations ne sont bien évidemment pas très intéressantes ici mais en pratique il va être très utile de pouvoir se servir d’une valeur retournée par une fonction.
La déclaration des types de valeurs de retour
Depuis PHP7, nous allons de façon similaire à la déclaration de type des arguments pouvoir déclarer les types de retour.
Les déclarations du type de retour vont permettre de spécifier le type de la valeur qui sera retournée par une fonction. On va ici pouvoir utiliser les mêmes types que les types pour les arguments vus dans la leçon précédente.
Notez que le typage strict affecte également les types de retour : si celui-ci est activé, alors la valeur retournée doit être du type attendu. Dans le cas contraire, une exception sera levée par le PHP. Nous étudierons les exceptions bien plus tard dans ce cours. Pour faire simple, vous pouvez pour le moment retenir qu’une exception est une erreur.
<?php declare(strict_types= 1);?> <!DOCTYPE html> <html> <head> <title>Cours PHP & MySQL</title> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no"> <link rel="stylesheet" href="cours.css"> </head> <body> <h1>Titre principal</h1> <?php function multreturn($a, $b): int{ return $a * $b; } echo multreturn(2, 4); echo '<br><br>'; echo multreturn(2, 4.1); ?> <p>Un paragraphe</p> </body> </html>
Dans le cas où le typage strict n’est pas activé (qui est le cas par défaut), si les valeurs retournées ne sont pas du type attendu alors elles seront transtypées, ce qui signifie que le PHP va essayer de transformer leur type pour qu’il corresponde au type attendu.