Page 1 sur 1

A propos du tuto sur les fonctions...

Posté : 02 mars 2006, 17:25
par albius
Bonjour,

Je m'essaye sur votre tutoriel sur les fonctions mais j'ai des difficultés:
Je reprends le premier exemple de donné:
function dire_texte($texte = 'Bonjour', $qui){
if(empty($qui))
{ // $qui est vide, on retourne faux
return false;
}else{
echo $texte . ' ' . $qui; // on affiche le texte
return true; }// fonction exécutée avec succès
}
J'ai créé un autre fichier sur lequel j'appelle cette fonction:
require("fonctions.inc.php");
dire_texte("mon_nom"); ?>
Le serveur me renvoit :

Code : Tout sélectionner

"Warning: Missing argument 2 for dire_texte() in c:\program files\easyphp1-8\www\fonctions.inc.php on line 62"
J'avoue ne pas comprendre d'autant plus que dans les explications données, il est dit que
"Certains arguments peuvent être optionnels, lorsqu' une valeur par défaut leur a été donnée. Dans l'exemple précédent, $qui est obligatoire, alors que $texte est optionnel"
Je devrais voir donc s'afficher 'bonjour mon_nom' (?)

Merci,

Posté : 02 mars 2006, 17:31
par heddicmi
pas réllement en faite...

il est optionnel, donc tu n'as pas besoin de le préciser, il prendra la valeur par défaut. Mais il faut cependant respecter l'autre des paramètres.

Ici, tu appelles la fonction avec 1 seul paramètre. Du coup, il l'interprète comme étant destiné pour la valeur de $texte...

Tu peux mettre : dire_texte(, "nom_nom");

Par contre, si la fonction était définis comme ceci :
function dire_texte($qui, $texte="Bonjour")
Alors, tu pourrais l'appeller en ne précisant qu'un paramètre... Le 1er correspondant à $qui...

Malgré l'optionnalité, il faut respecter l'ordre des paramètres ;)

re:

Posté : 03 mars 2006, 10:32
par albius
Bonjour,

Donc, si j'ai bien compris ta réponse, je place (nécessairement) en premier le (ou les) paramètres obligatoires et les optionnels en second (?)
merci,

Posté : 03 mars 2006, 10:52
par Hermès
Dans le cas de ta fonction, c'est le premier paramètre qui est optionnel vu qu'il a une valeur assignée par défaut ("Bonjour").

Donc soit tu fais l'appel de heddicmi : dire_texte(, "tout le monde"), soit dans la fonction tu changes l'ordre des paramètres pour pouvoir l'appeler avec dire_texte("tout le monde").

Par contre ce n'est pas $qui qui est optionnel. Le fait qu'il y ait un test empty($qui) vérifie juste si $qui == ""

Re: re:

Posté : 03 mars 2006, 11:30
par heddicmi
Bonjour,

Donc, si j'ai bien compris ta réponse, je place (nécessairement) en premier le (ou les) paramètres obligatoires et les optionnels en second (?)
merci,
nécessairement, pas forcément.. C'est toi qui veux... Mais si tu veux appeller ta fonction en ne transmettant que les paramètres obligatoires, alors oui !

re:

Posté : 03 mars 2006, 11:37
par albius
Ok, merci bien.

Posté : 19 mars 2006, 00:32
par didgar
Salut !
Tu peux mettre : dire_texte(, "nom_nom");
Chez moi, l'astuce ci-dessus avec la fonction ci-dessous ...
function dire_texte($texte = 'Bonjour', $qui){
if(empty($qui))
{ // $qui est vide, on retourne faux
return false;
}else{
echo $texte . ' ' . $qui; // on affiche le texte
return true; }// fonction exécutée avec succès
}
... me donne un parse error !
Parse error: parse error, unexpected ',', expecting ')' in .../... on line 12

Une idée ??

A+

Didier

Posté : 19 mars 2006, 01:16
par Truc
je te dirais de ne pas chercher midi à 14h, retourne tout simplement les paramètres :wink:
function dire_texte($qui,$texte = 'Bonjour')
appel:
dire_texte("nom_nom");
2eme appel:
dire_texte("nom_nom","Salut");

Posté : 19 mars 2006, 16:40
par didgar
Salut !
je te dirais de ne pas chercher midi à 14h, retourne tout simplement les paramètres :wink:
Ca j'avais bien compris ;-)

Mais si on complique un peu ?

Soit une fonction et son appel :
<?php

function ma_fonction($arg1,$arg2,$arg3opt='toto',$arg4opt='titi',$arg5opt='tata')
{
	echo 'arg1 -> '.$arg1.'<br />';
	echo 'arg2 -> '.$arg2.'<br />';
	echo 'arg3 -> '.$arg3opt.'<br />';
	echo 'arg4 -> '.$arg4opt.'<br />';
	echo 'arg5 -> '.$arg5opt.'<br />';
}

ma_fonction('je',"m'appelle",'marcel','dugenou','junior');
?>
Tel que, ça fonctionne.

Par contre, si l'appel devient :
ma_fonction('je',"m'appelle",'marcel',,'junior');
La quatrième paramètre ayant disparu, il devrait être remplacé par sa valeur par défaut [ titi ] non ?

Ouala la vraie question !

A+

Didier

PS : je ne souhaite bien sur pas modifier l'ordre des arguments !

Posté : 19 mars 2006, 17:03
par Truc
Perso je pense pas que "l'astuce" de la virgule fonctionne. Les arguments par défaut sont en fin de liste de paramètres.

Tu peux regarde CECI (bas de page) :wink:

Posté : 19 mars 2006, 17:34
par didgar
Salut !
Perso je pense pas que "l'astuce" de la virgule fonctionne. Les arguments par défaut sont en fin de liste de paramètres.
Mes arguments ayant une valeur par défaut sont aussi en fin de liste. Ce qui m'intéresse c'est d'atteindre mon troisième et mon cinquième arguments pour qu'ils aient une valeur autre que celle par défaut. En même temps, je souhaite que mon quatrième argument aie LUI la valeur par défaut !!!

Ce que j'écris
ma_fonction('je',"m'appelle",'marcel',,'junior');
Concernant l'astuce de la virgule, que fait-on d'autre quand on écrit ceci ?

while(list(,$val)=each($tab))
{
     ...
}
Tu peux regarde CECI (bas de page) :wink:
Merci pour le lien. Visiblement pas d'info sur l'astuce de la virgule ;-)

A+

Didier

Posté : 19 mars 2006, 17:50
par Truc
que fait-on d'autre quand on écrit ceci ?

while(list(,$val)=each($tab))
{
     ...
}
Dans ce cas tu ne récupères que le 2ème élément du tableau $tab que tu affactes à $val.

Et pour cette "astuce" elle ne fonctionne pas avec les fonctions. sinon tu n'aurais pas de message d'erreur interdisant 2 virgules qui se suivent. :wink: