A propos du tuto sur les fonctions...

Eléphant du PHP | 226 Messages

02 mars 2006, 17:25

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,

Mammouth du PHP | 568 Messages

02 mars 2006, 17:31

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 ;)
Heddi s'est remis à développer pour lui même !
Martina Hingis - Étoile du Tennis
Heddi v. 2007

Eléphant du PHP | 226 Messages

03 mars 2006, 10:32

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,

Eléphant du PHP | 312 Messages

03 mars 2006, 10:52

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 == ""

Mammouth du PHP | 568 Messages

03 mars 2006, 11:30

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 !
Heddi s'est remis à développer pour lui même !
Martina Hingis - Étoile du Tennis
Heddi v. 2007

Eléphant du PHP | 226 Messages

03 mars 2006, 11:37

Ok, merci bien.

Eléphant du PHP | 180 Messages

19 mars 2006, 00:32

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
Giant steps are what you take ... walking on the moon ;-)

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

19 mars 2006, 01:16

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");

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 180 Messages

19 mars 2006, 16:40

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 !
Giant steps are what you take ... walking on the moon ;-)

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

19 mars 2006, 17:03

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:

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 180 Messages

19 mars 2006, 17:34

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
Giant steps are what you take ... walking on the moon ;-)

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

19 mars 2006, 17:50

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:

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute