Les fonctions utilisateurs en PHP
Il est possible de mémoriser un ensemble d’instructions, parfois complexes, en PHP, grâce au fonction utilisateur.
Il existe déjà des fonctions prédéfinies qui réalisent des taches précises (echo, count()..), mais vous pouvez créer vos propres fonctions. Une fonction est comme un sous-programme dans le programme principal. Elles sont très utilisées dans les bibliothèques PHP et en programmation orientée objet.
La fonction constitue donc un ensemble d’instructions que vous écrivez une seule fois mais qui peut être utilisée plusieurs fois. Il suffira de la rappeler par son nom, ce qui vous dispense de recopier à chaque fois toutes les instructions dans le code.
Une fonction peut même récupérer des paramètres (des éléments nécessaires à son fonctionnement) et retourner des valeurs
Déclaration d’une fonction
Pour déclarer une fonction, utilisez l’opérateur function et donnez lui un nom.
<?php
function affichage(){
echo "bonjour";
}
?>
Le bloc d’instructions se trouve entre les accolades { }.
Exécuter une fonction
Il suffit de l’appeler par son nom.
<?php
function affichage(){
echo "bonjour";
}
affichage("daniel"); // retournera 'bonjour'
?>
Affichage
bonjour
Les paramètres
Il est possible de transmettre à la fonction des paramètres, qui sont recupéreés entres les parenthèses ()
<?php
function addition($nb1,$nb2){
echo $nb1+$nb2;
}
addition(3,9);
?>
Affichage
12
Note : ces paramètres peuvent êtres de simples variables mais aussi des tableaux et des objets.
Valeur par défaut
Il est possible de donner une valeur par défaut à ces paramètres. Il suffit de leur affecter une valeur.
<?php
function division($nb1,$nb2=10){
echo $nb1/$nb2;
}
division(2);
?>
Affichage
0.2
Dans ce cas, le deuxième argument n’étant pas fourni, $nb2 aura la valeur par défaut de 10.
Valeur de retour
Une fonction peut retourner une valeur grâce au mot clé return. A ce moment l’exécution de la fonction sera stoppé, et toutes les autres instructions de cette fonction qui suivront seront ignorées
<?php
function controlePseudo($pseudo){
if($pseudo != ""){
return "pseudo correct";
}else{
return "pseudo incorrect";
}
}
echo controlePseudo('Daniel');
?>
Affichage
pseudo correct
Vous pouvez retourner des valeurs à tout moment dans votre script.
<?php
function addition2($nb1,$nb2){
return $nb1+$nb2;
}
// autres scripts
echo "voici le résultat de l'addition 25 + 98 : ".addition2(25,98);
?>
Affichage
voici le résultat de l'addition 25 + 98 : 123
Retourner plusieurs valeurs
Si une fonction doit retourner plus valeurs, le plus simple est d’utilser un tableau.
<?php
function loto(){
return array(42,13,14,16,34,2);
}
print_r( loto() );
?>
Affichage
Array ( [0] => 42 [1] => 13 [2] => 14 [3] => 16 [4] => 34 [5] => 2 )
Vous pouvez aussi utiliser la fonction list() pour affecter, en une seule fois, plusieurs variables venant du tableau.
<?php
function loto2(){
return array(42,13,14,16,34,2);
}
list($nb1,$nb2,$nb3,$nb4,$nb5,$nb6) = loto2();
echo $nb1;
?>
Affichage
42
La récursivité
Parfois, une fonction a besoin de s’appeler elle-même. C’est souvent le cas pour les calculs mathématiques, comme le calcul du factoriel d’un nombre. Le principe est le suivant : je multiplie un nombre par le même nombre soustrait de 1 et je répète l’opération jusqu’à ce que le dernier nombre vaut 1 – exemple: 6*5*4*3*2*1.
On peut imaginer une fonction qui effectue n*(n-1) et cette fonction sera rappeler plusieurs fois par elle même jusqu’à ce que la dernière valeur vaut 1
<?php
function factoriel($n){
if($n==1){
return 1;
}
return $n*factoriel($n-1);
}
echo factoriel(3); // retourne 3*2*1
?>
Affichage
6
Visibilité des variables dans une fonction
Les variables n’ont pas toutes la même visibilité dans un script. Une variable déclarée à l’extérieur d’une fonction n’est pas directement accessible dans la fonction. Voir le tutoriel sur les variables.
<?php
$nb = 2;
function affiche(){
echo $nb; // affichera une erreur
}
?>
Portée globale
Pour rendre une variable accessible dans une fonction, vous avez deux possibilités :
– utiliser l’opérateur global
<?php
$nb = 2;
function affiche(){
global $nb;
echo $nb; // affichera 2
}
affiche();
?>
Affichage
2
– ou utiliser la superglobale $GLOBALS[]
<?php
$nb = 2;
function affiche2(){
echo $GLOBALS['nb']; // affichera 2
}
affiche();
?>
Affichage
2
Portée locale
Une variable déclarée dans la fonction ne pourra pas être utilisée à l’extérieur.
<?php
function affiche(){
$nb=2;
echo $nb; // affichera 2
}
echo $nb; // affichera une erreur
?>
Portée static
C’est une variable locale mais qui ne sera pas réinitialiser à chaque appel de la fonction. Elle est persistante et conservera ses différentes valeurs à chaque appel de la fonction.
Cette portée est très utile pour la création de compteurs dans une fonction.
<?php
function direBonjour($prenom){
static $nbPersonne=0;
echo "bonjour ".$prenom."<br>";;
$nbPersonne++;
echo "je viens de dire bonjour à ".$nbPersonne." personne(s)";
}
direBonjour("daniel");
// affichera 'je viens de dire bonjour à 1 personne(s)'
echo "<br>";
direBonjour("roberto");
// affichera 'je viens de dire bonjour à 2 personne(s)'
?>
Affichage
bonjour daniel
je viens de dire bonjour à 1 personne(s)
bonjour roberto
je viens de dire bonjour à 2 personne(s)
Si vous ne déclarez pas $nbPersonne comme étant static, la fonction retournera ‘je viens de dire bonjour à 1 personne(s)’.
Passage par référence
Lorsque vous copiez des fonctions, il est parfois utile de lier les variables de la fonction à vos variables. Pour que cela soit possible vous pouvez utiliser le passage par référence. Voir le tutoriel sur les variables.
<?php
$moncompte = 2000;
function interet($taux,&$compte){
$compte *= 1+ $taux;
}
interet(0.02,$moncompte );
echo $moncompte; //affichera 2040
?>
Affichage
2040
Dans cet exemple la syntaxe & permet de lier la variable $compte de la fonction à la variable $moncompte. Les deux variables ont désormais la même référence ce qui veut dire qu’elles pointent la même case mémoire. Toute modification de l’une entraînera la modification de l’autre. Si $compte est modifié par la fonction, alors $moncompte le sera aussi!
Les fonctions variables
Le principe consiste à mémoriser une fonction en tant que valeur d’une variable. Cela peut servir à faire des fonctions de rappel ou des tableaux de fonctions.
En rajoutant des parenthèses à la variable, vous exécuter la fonction qu’elle contient : c’est le concept de fonctions variables.
<?php
function calculInteret($taux,$compte){
$compte *= 1 + $taux;
}
$funcInteret = 'calculInteret';
$funcInteret(0.2,20000); // exécute la fonction calculInteret()
?>
Affichage
24000
L’exemple qui suit utilise un tableau qui stocke plusieurs fonctions.
<?php
function seLever(){
echo "je me lève <br>";
}
function travailler(){
echo "je travaille <br>";
}
function dormir(){
echo "je dors";
}
$maVie = array('seLever','travailler','dormir');
foreach($maVie as $action){
$action();
}
?>
Affichage
je me lève
je travaille
je dors