Une fonction est un bloc de code PHP destine generalement a etre reutilise plusieurs fois. Plutot que d'ecrire X fois le morceau de code, on le met dans une fonction, et c'est cette fonction que l'on appellera des qu'on l'aura decide. On pourra utiliser les fonctions pour par exemple afficher un texte bien defini (ce que nous allons voir plus bas) ou encore effectuer des calculs repetitifs en fonction de parametres d'entree (comme par exemple calculer une conversion en degres C => degres fahrenheit, vous fournissez la valeur des degres Celcius et la fonction vous retourne l'autre valeur. Dans ce cas, le parametre sera la temperature d'entree en degres C). Voici la syntaxe de base pour dire a PHP "ceci est une fonction, il faut la traiter comme telle" :
<?php
function mafonction()
{
}
?>
On constate que le premier mot est le mot function, il est obligatoire et signifie que le bloc traite par PHP sera une fonction.
Une fonction comporte toujours des parentheses.
Il existe deux grands types de fonctions : les fonctions qui retournent une valeur, et celles qui n'en retournent pas (on appelle ces fonctions des procedures).
Exemple de procedure affichant "bonjour tout le monde !" :
<?php
function hello_world()
{
echo 'bonjour tout le monde !';
}
?>
Pour afficher Bonjour tout le monde ! n'importe ou dans votre code, vous n'aurez plus qu'a taper ceci :
<?php
hello_world(); //appelle la fonction "hello_world" qui va afficher "Bonjour tout le monde !"
?>
Nous venons de voir l'exemple d'une procedure qui ne contenait aucun parametre. Les parametres sont des variables que l'on place entre les deux parentheses. Ces parametres servirons de donnees sur lesquelles effectuer la fonction. Generalement, les parametres impliquent que l'on va retourner quelque chose (on aura donc de tres grandes chances d'avoir des fonctions et non des procedures). Nous verrons plus loin que le passage par reference des parametres (ne vous inquietez pas si vous ne comprenez pas encore ce que je dis, vous le comprendrez en bas de cette page) permet de s'affranchir generalement du retour d'une valeur.
Exemple d'une fonction calculant le produit de deux nombres et retournant le resultat :
<?php
function produit($nombre1, $nombre2)
{
return $nombre1 * $nombre2;
}
?>
Ici la fonction retournera le produit des deux nombres. Remarquez qu'on utilise le mot cle return pour renvoyer une valeur. Vous pouvez egalement utiliser le mot cle return pour stopper l'execution de la fonction (en retournant une valeur). Tout ce qui se trouve apres return ne sera pas execute.
Si vous souhaitez afficher le produit de 10 et 2 par exemple, vous pouvez faire ceci :
<?php
echo produit(10, 2);
?>
Nous pouvons assigner des valeurs par defaut aux parametres. Pourquoi assigner des valeurs par defaut ? c'est simple, assigner une valeur par defaut a un parametre permet de se passer du passage du parametre lorsque vous appelez la fonction (attention, ceci n'est pas general). Voici un exemple :
<?php
function produit($nombre1 = 10, $nombre2 = 2)
{
return $nombre1 * $nombre2;
}
?>
Ici, nous assignons comme valeurs par defaut les nombres 10 et 2. Si nous appelons maintenant notre fonction comme ceci :
<?php
echo produit();
?>
Nous obtiendrons le meme resultat que plus haut, car les deux parametres ne sont pas obligatoires ici. Par contre attention, si vous renseignez un parametre, il sera prioritaire, c'est a dire que si vous appelez la fonction comme ceci :
<?php
echo produit(5, 2);
?>
Ici, on multipliera 5 par 2 et pas 10 par 2. Donner une valeur par defaut aux parametres convient donc lorsque vous souhaitez ne pas etre oblige de rajouter des parametres lorsque vous dites a PHP "execute-moi cette fonction". Attention avec l'exemple suivant :
<?php
echo produit(5);
?>
Il n'y a qu'un seul parametre ! alors lequel va t-il remplacer ? Et bien il s'agit du premier parametre. En effet, lorsque vous ne renseignez pas tous les parametres, PHP va remplacer les parametres dans l'ordre.
Le passage de parametres par reference n'est pas complique en soit. Voyons un exemple simple et expliquons ensuite son fonctionnement :
<?php
function ajouter_cinq($nombre)
{
$nombre += 5; //equivalent de $nombre = $nombre + 5
return $nombre;
}
$mon_entier = 15;
echo ajouter_cinq($mon_entier); //affichera 20
echo $mon_entier; //affichera 15
?>
Ici on effectue ce qu'on appelle un passage de parametres par recopie. Ne vous prenez pas trop la tete avec ces termes, il s'agit d'un peu de culture generale ;) En fait cela veut dire que la variable que l'on va passer dans la fonction (ici $mon_entier) sera recopiee dans une autre variable nommee $nombre (qui prendra donc la meme valeur). La fonction utilise ensuite cette variable $nombre pour faire ses traitements, et non la variable $mon_entier. C'est pourquoi lorsqu'on affiche le contenu de la variable $mon_entier apres avoir appele la fonction, on obtient toujours 15.
Voici maintenant la version avec le passage par reference :
<?php
function ajouter_cinq($nombre)
{
$nombre += 5; //equivalent de $nombre = $nombre + 5
return $nombre;
}
$mon_entier = 15;
echo ajouter_cinq(&$mon_entier); //affichera 20
echo $mon_entier; //affichera 20
?>
L'avantage de ce type d'operation est que vous travaillez directement sur la variable d'origine, il n'y a pas de recopie et donc les performances peuvent etre meilleures. Vous n'avez d'ailleurs plus forcement besoin de retourner une valeur. Prenons cet exemple qui fait exactement la meme chose que le precedent :
<?php
function ajouter_cinq($nombre)
{
$nombre += 5; //equivalent de $nombre = $nombre + 5
}
$mon_entier = 15;
ajouter_cinq(&$mon_entier);
echo $mon_entier; //affichera 20
?>