PHP - MySQL [Retour au menu]
Les fonctions personnalisées

Exemple de base, placement dans <HEAD>, 0, 1 et plusieurs arguments, arguments par défaut, nombre variable d'arguments, retour de fonctions simples et dans un tableau, TRUE et FALSE, passage d'arguments par valeur et par référence, pointeurs vers des fonctions stockés dans des variables

Création d'une fonction basique

Cette fonction affiche simplement ok. Elle ne sera pas exécutée directement parce qu'on ne l'appelle à aucun moment.

<body>
  <?
    function Test()
      {
      echo "ok";
      }

  ?>
</body>

Appel d'une fonction locale basique

Pour l'exécuter, il suffit de l'appeler. Dans l'exemple suivant, je l'appelle une fois avant et une fois après, ça marche les 2 fois ::

<?
  Test();
  function Test()
    {
    echo "Je suis dans Test";
    }

  Test();
?>

Il est tout a fait possible d'appeler une fonction dans une page qui se trouve dans d'autres balises PHP, comme ceci :

<body>
  <?
    function Test()
      {
      echo "Je suis dans Test";
      }

  ?>
  Je suis dans HTML
  <?
    Test();
  ?>
</body>

Exécution de PHP dans la section <HEAD>

Même si ça ne parait pas très propre, il est possible d'exécuter du PHP dans la section <HEAD> du fichier HTML. La page suivante affichera "Je suis dans l'entete" sur la page HTML

<html>
  <head>
    <?
      echo "Je suis dans l'entete";
    ?>

    <title>Exercice</title>
  </head>
  <body>
  </body>
</html>

Placement de fonctions dans la section <HEAD>

Plus proprement, on pourrait plutôt installer des fonctions PHP dans la section <HEAD>, voire même avant la balise <HTML>:

<html>
  <head>
    <?
      function Test()
        {
        echo "Je suis dans Test";
        }

    ?>
    <title>Exercice</title>
  </head>
  
  <body>
    <?
      Test();
    ?>
  </body>
</html>

Création d'une fonction avec un paramètre

Exemple 1 : Contre-nature

La fonction Test n'a pas de paramètre, et pourtant elle est appelée avec un paramètre ("a"), tout se passe sans erreur, le "a" est simplement perdu

<?
  function Test()
     {
     echo "OK";
     }
  Test("a");
?>

Exemple 2 : Correct

Cette fois, nous appelons Test avec le paramètre ("Michel"), et cettechaîne de caractère est transmise à $UnTexte.

<?
  function Test($UnTexte)

    {
    echo $UnTexte;
    }
  Test("Michel");
?>

Création d'une fonction avec plusieurs paramètres

Exemple 1 : Contre nature

On appelle la fonction Test avec 2 paramètres, alors que Test n'en accepte qu'un. Pas d'erreur signalée, et le 2ème paramètre, part simplement à l'eau !

function Test($UnTexte)
  {
  echo $UnTexte;
  }
Test("Lampe", "bureau");

Exemple 2 : Correct

function Test($PremierTexte, $DeuxiemeTexte )
  {
  echo $PremierTexte;
  echo $DeuxiemeTexte;
  }
Test("Lampe", "bureau");

Exemple 3 : évitement d'un paramètre

L'exemple suivant n'utilise pas $Deux :

function Test($Un , $Deux , $Trois)
  {
  echo $Un;
  echo $Deux;
  echo $Trois;
  }
Test("Lampe" , "" , "bureau");

Utilisation de valeurs par défaut

Il est toutefois possible d'envoyer moins de paramètres que prévu, si des valeurs par défaut sont prévues.

Exemple 1 : La valeur par défaut est utilisée :

function Test($Un, $Deux="Pollux")
  {
  echo $Un;
  echo $Deux;
  }
Test("Castor");

Affichage : CastorPollux

Exemple 2 : La valeur par défaut est remplacée :

function Test($Un, $Deux="Pollux")
  {
  echo $Un;
  echo $Deux;
  }
Test("Castor", "Lampadaire");

Affichage : CastorLampadaire

Nombre variable d'arguments

Il est possible d'envoyer un nombre variable de paramètres à une fonction. La fonction s'écrit dans ce cas avec deux parenthèses vides, comme s'il n'y avait aucun paramètre :

Compter les paramètres : func_num_args()

function Test()
  {
  echo func_num_args();
  }
Test ("Table à manger" , FALSE , 557 , ""); // soit 4 arguments

L'affichage sera : 4

Afficher les paramètres : func_get_arg

function Test()
  {
  echo func_get_arg (0); // Table à manger
  echo func_get_arg (1); // Rien, même pas 0
  echo func_get_arg (2); // 557
  echo func_get_arg (3); // Rien, même pas 0
  echo func_get_arg (4); // PHP renvoie une erreur
  }
Test ("Table à manger", FALSE, 557, "");

Retour de fonctions

Le mot-clé return permet de retourner des valeurs

Exemple 1 : pas de return

Ici, voyez qu'un dit echo Test();, et pas seulement Test(). Ce qui veut dire qu'on affiche avec echo le résultat de la fonction. Mais ici, comme il n'y a pas de return, absolument rien ne s'affiche.

function Test()
  {
  //Rien ne se passe ici...
  }
echo Test();

Exemple 2 : un return simple

function Test()
  {
  return ("ballon");
  }
echo Test();

affiche : ballon

Exemple 3 : Non-utilisation du retour de la fonction

Ceci dit, ce n'est pas parce qu'il y a un return dans la fonction qu'on est obligé de l'utiliser. Le code :

function Test()
  {
  return ("ballon");
  }
Test();

N'affiche rien, certes, mais il fonctionne sans la moindre erreur.

Plusieurs retours de fonctions

Exemple 1 : C'est le premier return qui est utilisé

function Test()
  {
  return("Carotte");
  return("Poire");

  }
echo Test();

Affiche Carotte

Exemple 2 : Il est possible d'utiliser un if

function Test($TrucAManger)
  {
  if ($TrucAManger == "Oignon")
    return ("Légume");
  else
    return ("Fruit");
  }
echo Test("Pomme");

Affiche Fruit

Utilisation de FALSE et TRUE

Une utilisation courante du return est le retour VRAI ou FAUX. Par exemple :

<HEAD>
  <?
    function EstGrand($QuelChiffre)
      {
      if ($QuelChiffre > 10)
        return TRUE;
      else
        return FALSE;
      }

  ?>
</HEAD>
<BODY>
  <?
    if (EstGrand(12))
      echo "C'est un grand chiffre";
    else
      echo "C'est un petit chiffre"
  ?>
</BODY>

Permet d'écrire d'élégantes lignes de code telles que if (EstGrand(12)) au lieu de if (EstGrand(12) == TRUE).

Passage d'argument par valeur ou par référence

Exemple 1 : Passage par valeur

par défaut, tous les arguments sont passés aux fonctions par valeur : C'est à dire que cette valeur ne va pas pouvoir se modifier durablement dans la fonction.

Dans l'exemple suivant, on déclare $Fruit, et on lui dit que c'est égal à Pomme. Quand on appelle Test, on envoie une COPIE de la variable dans le paramètre qui s'appelle AUSSI $UnFruit, mais c'est pas le même :

function Test($UnFruit)
  {
  $UnFruit = "Banane";
  echo $UnFruit; // Banane
  }
$UnFruit = "Pomme";
Test ($UnFruit);
echo $UnFruit; // Pomme

Exemple 2 : Passage par référence

Cette fois le simple fait d'ajouter le petit signe & devant le paramètre veut dire que c'est apssé PAR REFERENCE : Les variables vont pouvoir se modifier dans la fonction :

function Test(&$UnFruit)
  {
  $UnFruit = "Banane";
  echo $UnFruit; // Banane

  }
$UnFruit = "Pomme";
Test ($UnFruit);
echo $UnFruit; // Banane

Retour d'un tableau de valeurs

Un peu plus haut, nous avons vu comment passer un nombre variable de paramètres à une fonction. Une manière un peu similaire de faire serait de passer en paramètre un tableau.Constatez que rien dans le paramètre de Test ne montre qu'il s'agit forcément d'un tableau : En effet, il est bien écrit $UneListe, et pas $UneListe[]! Evidemment, si on envoie autre chose qu'un tableau, la ligne echo $UneListe[2]; va se planter...

function Test($UneListe)
  {
  echo $UneListe[2]; // Affiche : Cacahuète
  }
$Fruit=array("Abricot","Banane","Cacahuète","Pomme");
Test($Fruit);

Remarquons que même les tableaux sont passés par valeur : C'est à dire que même si la fonction change le contenu d'un élément du tableau, ça ne changera PAS dans le tableau original :

function Test($UneListe)
  {
  echo $UneListe[2]; // Cacahuète
  $UneListe[2] = "Arrosoir";
  echo $UneListe[2]; // Arrosoir
  }
$Fruit=array("Abricot","Banane","Cacahuète","Pomme");
echo $Fruit[2]; //Cacahuète
Test($Fruit);
echo $Fruit[2]; // Cacahuète

Assignation de pointeurs vers des fonctions à de simples variables

Nous avons 2 fonctions : Cuisine(), sans paramètre, et Salon($UnArgumentQuelconque) avec 1 paramètre. Nous avons ensuite une variable $Maison, à laquelle nous assignons un pointeur vers Cuisine(), et nous l'appelons : $Maison();. C'est donc la fonction Cuisine() qui va être exécutée. Ensuite, rien n'empêche d'assigner un pointeur vers une autre fonction avec cette fois 1 paramètre : $Maison = 'Salon'.

function Cuisine()
  {
  echo "Je suis dans la cuisine";
  }

function Salon($UnArgumentQuelconque)
  {
  echo "Je suis dans le salon avec $UnArgumentQuelconque";
  }

$Maison = 'Cuisine';
$Maison();

$Maison = 'Salon';
$Maison('Une petite table');

On peut indifféremment écrire :

$Maison = 'Cuisine';
$Maison = Cuisine;
$Maison = "Cuisine";

Vérification de l'existence d'une fonction

Fonction function_exists().

Exemple :

<?
function inutile()
{
}
if(function_exists("inutile"))
  echo "existe";
else
  echo "n'existe pas";
?>

---