En PHP il est possible de créer ses propres fonctions. Les fonctions sont utiles lorsqu'on est amené à répéter le même traitement plusieurs fois. Au lieu de réécrire le code à chaque reprise, on met celui ci dans une fonction qu'on appellera quand on en aura besoin. Même si une fonction répète le même traitement, elle peut changer de comportement d'un appel à un autre en lui passant des arguments différents à chaque fois.
Création et appel d'une fonction
Pour créer une fonction on fait appel au mot clé function comme ceci:
function nomDeLaFonction($arg1,$arg2...){
CorpsDeLaFonction;
return $valeurDeRetour;
}
Le mot clé function est suivi du nom de la fonction qui respecte les mêmes règles qu'un nom d'une variable (commence par une lettre ou le caractères souligné et peut contenir des lettres et des chiffres) et ne dois pas correspondre au nom d'une fonction prédéfinie (comme date() ou strlen() par exemple).
La fonction peut ou non recevoir des arguments entre les parenthèses. Entre les accolades on déclare le corps de la fonction qui consiste en un ensemble d'instructions qui s’exécuteront au moment de son appel.
Une fonction peut ou non retourner une valeur (ou plusieurs valeurs dans une variable de type tableau).
Pour appeler une fonction il suffit d'écrier son nom (et la liste des arguments si elle en contient).
Exemple:
<?php
function daj(){
echo date("d/m/Y");
}
?>
Si la fonction daj() est appelée elle affichera la date d'aujourd'hui (par exemple: 07/01/2016). Elle ne reçoit aucun argument et ne retourne aucune valeur.
Pour appeler la fonction daj() il suffit de faire:
<?php
daj();
?>
Le fait d'évoquer le nom d'une fonction exécute le code qu'elle contient à l'endroit où elle est appelée.
Logiquement, une fonction est appelé après sa création et non pas avant. Mais à partir de PHP4 on peut appeler une fonction avant sa déclaration. C'est principalement parce qu'il s'agit d'un langage compilé.
Portés des variables
Par défaut, une variable déclarée dans une fonction PHP est locale à cette fonction. Elle n'est donc pas reconnue à l'extérieur de celle ci. De même, une variable déclarée en dehors de la fonction n'est pas par défaut accessible depuis l'intérieur.
Exemple:
<?php
$a="Salut";
function f(){
$b=" à tous";
echo $a;
}
f();
echo $b;
?>
La variable $a déclarée à l'extérieur de la fonction n'est pas reconnue à l'intérieur de celle-ci. Au moment de son appel, la fonction f() essaiera d'afficher la variable locale $a qui n'existe pas. La variable $b initialisée à l'intérieur de la fonction est locale à celle-ci également. Alors rien ne s'affichera avec echo $b;.
Selon la configuration de php.ini, il se possible que des erreurs de notifications disant que les variables $a et $b n'existent pas se déclenchent.
Pour que les variables soient accessibles de partout on va faire appel à la variable $GLOBALS et le mot clé global.
Variable superglobale $GLOBALS
La variable superblobale $GLOBALS est un tableau associatif qui permet d'accéder à une variable globale de n'importe où est quelque soit le contexte, particulièrement de l'intérieur des fonctions. $GLOBALS accepte comme clé la variable à laquelle on veut accéder (dépourvue du symbole $).
Mot-clé global
Par défaut, une variable initialisée à l'intérieur d'une fonction est locale à cette fonction. Si on veut qu'elle soit globale, alors on la déclare avec le mot clé global.
Pour que l'exemple précédent fonctionne comme prévu on doit le modifier en y insérant $GLOBALS et global:
<?php
$a="Salut";
function f(){
global $b;
$b=" à tous";
echo $GLOBALS["a"];
}
f();
echo $b;
?>
Ce qui donne:
Salut à tous
Exemple pratique
On souhaite créer une fonction qui converti la date du format SQL au format conventionnel. Par exemple le 1 février 2016 en SQL est représenté 2016-02-01. Cependant on veut l'afficher 01/02/2016.
Voilà le code de la fonction:
<?php
function dateSQLtoConv($date){
$tab=explode("-",$date);
return $tab[2]."/".$tab[1]."/".$tab[0];
}
echo dateSQLtoConv("2016-02-01");
?>
Ce qui donne:
01/02/2016
Nous avons éclaté la chaîne de caractères qui représente la date SQL ("2016-02-01") au niveau des caractères "-". Nous obtenons alors un tableau dont les indexes contiennent respectivement les valeurs 2016, 02 et 01. Il suffit d'inverser et concaténer avec le slach pour récupérer la date conventionnelle (01/02/2016).