 
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>
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>
    
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>
    
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>
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");
  ?>
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");
  ?>
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");
function Test($PremierTexte, 
  $DeuxiemeTexte )
    {
    echo $PremierTexte;
    echo $DeuxiemeTexte;
    }
  Test("Lampe", "bureau");
L'exemple suivant n'utilise pas $Deux :
function Test($Un , 
  $Deux , $Trois)
    {
    echo $Un;
    echo $Deux;
    echo $Trois;
    }
  Test("Lampe" , "" , 
  "bureau");
    
Il est toutefois possible d'envoyer moins de paramètres que prévu, si des valeurs par défaut sont prévues.
function Test($Un, 
  $Deux="Pollux")
    {
    echo $Un;
    echo $Deux;
    }
  Test("Castor");
Affichage : CastorPollux
function Test($Un, 
   $Deux="Pollux")
    {
    echo $Un;
    echo $Deux;
    }
  Test("Castor", "Lampadaire");
Affichage : CastorLampadaire
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 :
function Test()
    {
    echo func_num_args();
    }
  Test ("Table à manger" , FALSE , 557 , ""); 
  // soit 4 arguments  
Le mot-clé return permet de retourner des valeurs
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(); 
function Test()
    {
    return ("ballon");
    }
  echo Test(); 
affiche : ballon
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.
function Test()
    {
    return("Carotte");
    return("Poire");
    }
  echo Test();
Affiche Carotte
function Test($TrucAManger)
    {
    if ($TrucAManger == "Oignon")
      return ("Légume");
    else
      return ("Fruit");
    }
  echo Test("Pomme");
Affiche Fruit
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).
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
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 
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 
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"; 
Fonction function_exists().
Exemple :
<?
  function inutile() 
  {
  }
  if(function_exists("inutile"))
    echo "existe";
  else
    echo "n'existe pas";
  ?>
---