PHP possède de nombreuses fonctions intégrées permettant d'effectuer des traitements variés. Bien sûr, nous pouvons aussi définir nos propres fonctions quand nous devons utiliser des séries répétitives d'instructions.

Nous allons voir quels sont les mécanismes généraux d'utilisation des fonctions dans PHP.

### Déclarer et invoquer une fonction

une fonction

Pour déclarer une fonction, on utilise le mot-clé function, suivi du nom de la fonction et d'une paire de parenthèses qui entourent les paramètres éventuels.

Le nom d'une fonction doit commencer par une lettre ou le caractère _ (underscore), suivi d'autant de lettres, de chiffres ou de _ que l'on veut.

Le nom des fonctions est insensible aux minuscules et majuscules.
Ainsi unNom, unnom, UNNOM et uNnOm feront référence à la même fonction.

Les parenthèses après le nom de la fonction sont obligatoires, même si la fonction n'a pas de paramètres. Si la fonctions accepte des paramètres, leur nom est séparé par une virgule.

Les instructions constituant le bloc de code de la fonction doivent être entourées d'accolades { et }, même si la fonction n'a qu'une seule instruction.

Les fonctions peuvent être déclarées n'importe où dans le script, avant ou après qu'elles soient invoquées.

Comme PHP est un langage avec un typage dynamique, il n'y a pas de déclaration de type pour une fonction.

Le code suivant représente une fonction appelée afficher qui envoie au navigateur (et donc affiche) un titre et sa couleur de fond, et un texte. Les 3 éléments sont les paramètres de la fonction : $texte contient le texte qui sera affiché, $titre contient le titre qui sera affiché, et $coul est la couleur de fond du titre.

    function afficher($texte, $titre, $coul) {
      echo '<h3 style="background:', $coul, '">';
      echo $titre;
      echo '</h3>';
      echo '<p>', $texte, '</p>';
    }

L'exemple ci-dessous montre l'utilisation de la fonction.

Exemple : déclarer et invoquer une fonction
<!DOCTYPE html> <html lang="fr"> <head><title>Test fonction</title></head> <body> <?php function afficher($texte, $titre, $coul) { echo '<h3 style="background:', $coul, '">'; echo $titre; echo '</h3>'; echo '<p>', $texte, '</p>'; } $txt = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.'; afficher($txt, 'Introduction', '#FFFF00'); $txt = 'Phasellus vel erat eu elit mattis lobortis non elementum risus. Nam facilisis ligula ut dui commodo eget placerat est condimentum.'; afficher($txt, 'Développement', '#FFFF00'); $txt = 'Etiam fringilla ullamcorper diam nec fermentum.'; afficher ($txt, 'Conclusion', '#CC0000'); ?> </body> </html>

### Rappel : portée des variables

Les variables définies à l'intérieur d'une fonction ne sont accessibles qu'à l'intérieur de cette fonction.

L'exemple suivant essaye d'utiliser la variable $prenom définie dans une fonction à l'extérieur de la fonction. L'exemple provoque l'affichage d'une erreur "Notice", non bloquante.

Exemple : portée des variables
<!DOCTYPE html> <html lang="fr"> <head><title>Portée des variables</title></head> <body> <?php error_reporting(E_ALL); function test_portee() { $prenom = 'François'; echo '<hr>', "Dans la fonction, je m'appelle ", $prenom, '<hr>'; } test_portee(); echo "<p>Dans le reste du script, je m'appelle ", $prenom; echo "<p>Malgé l'erreur, le script continue son exécution."; ?> </body> </html>

L'erreur déclenchée par une variable qui n'existe pas n'est pas une erreur bloquante dans PHP. Il faut donc être attentif à ce type d'erreurs qui peuvent entraîner des résultats graves si elles ne sont pas évitées.

Les variables définies à l'extérieur d'une fonction ne sont pas accessibles à l'intérieur de la fonction.

L'exemple suivant essaye d'utiliser dans une fonction la variable $nom qui est définie au niveau script (à l'extérieur de la fonction. L'exemple provoque l'affichage d'une erreur "Notice", non bloquante.

Exemple : portée des variables
<!DOCTYPE html> <html lang="fr"> <head><title>Portée des variables</title></head> <body> <?php error_reporting(E_ALL); $nom = 'Piat'; function test_portee() { $prenom = 'François'; echo '<hr>', "Dans la fonction, je m'appelle ", $nom, '<hr>'; } echo "<p>Dans le script, je m'appelle ", $nom; test_portee(); echo "<p>Malgré l'erreur, le script continue son exécution."; ?> </body> </html>

En utilisant le mot-clé global, les variables définies à l'extérieur d'une fonction seront accessibles à l'intérieur de la fonction.

Exemple : portée des variables
<!DOCTYPE html> <html lang="fr"> <head><title>Portée des variables</title></head> <body> <?php error_reporting(E_ALL); $nom = 'Piat'; function test_portee() { global $nom; $prenom = 'François'; echo '<hr>', "Dans la fonction, je m'appelle ", $nom, '<hr>'; } echo "<p>Dans le script, je m'appelle ", $nom; test_portee(); ?> </body> </html>

La variable $prenom définie dans la fonction n'est jamais accessible en dehors de la fonction.