On va reprendre un peu l'explication du fonctionnement d'une fonction.
Tu construis une fonction pour traiter des données en lui envoyant des paramètres, certains obligatoires, d'autres facultatifs. Dans le cas de ta fonction dir_texte(), tu as défini deux paramètres : le premier est obligatoire, le second est facultatif puisque tu lui as assigné une valeur par défaut.
Ensuite, je vais te recommander une modification qui va simplifier un peu. Il faut partir du principe que tu ne devrais pas gérer un quelconque affichage directement depuis ta fonction : une fonction traite de la donnée et retourne ou non un résultat : tu gères l'affichage depuis le code qui fait appel à cette fonction. Ta fonction ré-écrite devrait donc ressembler davantage à ceci :
<?php
/**
* Fonction de création d'un message d'accueil
*
* @param String $qui Nom de la personne à qui est destinée le message;
* @param String $texte (Facultatif) Texte du message, valeur par défaut = "bonjour";
* @return String Message d'accueil ou FALSE si le nom est absent.
*/
function dir_texte($qui, $texte='bonjour')
{
/* On commence par initialiser la variable qui sera retournée par la fonction */
$retour = false;
/* On vérifie que le paramètre $qui n'est pas vide */
if(!empty($qui))
{
/**
* Comme $qui n'est pas vide, on va assigner une nouvelle valeur
* à notre variable $retour :
* On construit le message complet
*/
$retour = $texte." ". $qui ."<br />" ;
}
/* On renvoie le résultat */
return $retour;
}
?>
J'y ai rajouté les commentaires : comme tu peux voir, elle va maintenant soit retourner un message, soit retourner "false".
La suite de ton code n'a, dans cette optique, plus vraiment de sens.
Signification du "!" : Lorsque tu écris par exemple :
if(!empty($qui))
C'est exactement comme si tu écrivais :
if(empty($qui) == false)
En clair, le "!" vérifie que la fonction qui suit retourne FALSE au lieu de TRUE.
Quant tu écris :
if(!dir_texte(""))
Ça n'a pas de sens parce que tu sais que ta fonction retournera FALSE si le premier paramètre est vide : or tu envoies une chaine vide comme premier paramètre, tu sais donc d'avance que le retour sera FALSE.
Si tu fais du traitement dynamique, tu ne connais pas la valeur qui est envoyée : par exemple, tu as un formulaire où l'internaute écrit son nom, tu récupères ce nom et tu l'envoies à la fonction pour construire le message. Tu pourrais donc faire quelque chose comme ça :
/* Récupération du nom */
$internaute = (isset($_POST['nom'])) ? $_POST['nom'] : "";
/* On appelle la fonction en envoyant le paramètre */
$message = dir_texte($internaute);
/**
* On vérifie la valeur du retour : s'il vaut false, on
* affiche un message d'erreur, sinon, on affiche le retour
*/
if($message == false)
{
echo "erreur<br />";
}
else
{
echo $message;
}
Bon dev
