Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

fonctions avec parametres optionnels

4 réponses
Avatar
CrazyCat
Bonjour ici,

je suis en train de créer une petite fonction du genre:
<?
function search($auteur="*", $categorie="*", $genre="*", $titre="*") {
// traitement des cas en fonction des paramêtres existants
return $new_search;
}
?>

Lorsque j'appelle cette fonction avec seulement le 1er paramètre, tout
marche très bien.
Mais sitôt que je veux utiliser un autre paramètre, j'ai un gros problème:
<? $my_test = search(,2); ?>
ou tout autre combinaison de paramètres me renvoit:
Parse error: parse error, unexpected ',', expecting ')' in
/var/www/html/requests.php on line 86

Et si je tente de passer des paramètres vides (<? $my_test =
search("",2); ?>), je perd mes valeurs par défaut (ce qui est normal).

Comment puis-je appeler ma fonction de manière à ce qu'elle fonctionne bien?

Merci d'avance.
--
Tout sur les eggdrops
http://www.c-p-f.org
ML @ eggdrop_fr@yahoogroupes.fr

4 réponses

Avatar
Sebastien Morey
Bonjour ici,

je suis en train de créer une petite fonction du genre:
<?
function search($auteur="*", $categorie="*", $genre="*", $titre="*") {
// traitement des cas en fonction des paramêtres existants
return $new_search;
}
?>

Lorsque j'appelle cette fonction avec seulement le 1er paramètre, tout
marche très bien.
Mais sitôt que je veux utiliser un autre paramètre, j'ai un gros problème:
<? $my_test = search(,2); ?>
ou tout autre combinaison de paramètres me renvoit:
Parse error: parse error, unexpected ',', expecting ')' in
/var/www/html/requests.php on line 86


Normal


Et si je tente de passer des paramètres vides (<? $my_test =
search("",2); ?>), je perd mes valeurs par défaut (ce qui est normal).

Comment puis-je appeler ma fonction de manière à ce qu'elle fonctionne
bien?

Merci d'avance.


Tester si le paramètre passé en argument est vide ou non?

function toto($par1,$par2)
{
if (strlen($par1)==0) $par1="Valeur par defaut";
...
return $resultat;
}

A+
Seb

--
Votre "logis" sur Internet
http://www.arts-du-web.fr

Avatar
CrazyCat
Sebastien Morey wrote:

Tester si le paramètre passé en argument est vide ou non?

function toto($par1,$par2)
{
if (strlen($par1)==0) $par1="Valeur par defaut";
...
return $resultat;
}


En fait, j'ai résolu le problème de cette manière (qui ressemble
beaucoup à la tienne):
<?
function search($auteur="", $categorie="", $genre="", $titre="") {
// traitement des cas en fonction des paramêtres existants
return $new_search;
}
?>
et je peux donc appeller search("", "", "test") et dans la fonction je
traite en partant du principe que la valeur par défaut est "".

Cela me permet "d'oublier" les paramètres inutiles lors de l'appel (ceux
placés après les paramètres qui ne doivent pas être par défaut) tout en
les initialisant.


--
Tout sur les eggdrops
http://www.c-p-f.org
ML @

Avatar
John Gallet
Bonjour,

function search($auteur="*", $categorie="*", $genre="*", $titre="*") {
// traitement des cas en fonction des paramêtres existants
return $new_search;
}
?>
Mais sitôt que je veux utiliser un autre paramètre, j'ai un gros problème:
<? $my_test = search(,2); ?>
ou tout autre combinaison de paramètres me renvoit:
Parse error: parse error, unexpected ',', expecting ')' in
/var/www/html/requests.php on line 86


Si vraiment tu as beaucoup besoin d'appeler cette fonction sans le
premier paramètre et que c'est une fonctionnalité à part entière, tu as
à mon sens deux solutions non bidouille :
1) utiliser la syntaxe objet et setter la ou les variables de recherche
à la demande. C'est logique et propre mais je ne sais pas si on a gagné
grand chose. Ce n'est pas de la programmation objet pour autant, c'est
seulement un raccourci de syntaxe.

2) wrapper cette fonction par d'autres, par exemple :

search_categ($input)
{
return search("*",$input);
}

search_genre($input)
{
return search("*","*",$input);
}

and so on...

Mais sur le fond, c'est quand même pas bien compliqué de spécifier la
liste des paramètres de gauche, sauf si tu changes souvent la valeur par
défaut cas dans lequel il est possible de faire tout simplement un
define() et de passer cette valeur en tant que défaut.

HTH
JG

Avatar
Mokhet
John Gallet wrote:

1) utiliser la syntaxe objet et setter la ou les variables de recherche
à la demande. C'est logique et propre mais je ne sais pas si on a gagné
grand chose. Ce n'est pas de la programmation objet pour autant, c'est
seulement un raccourci de syntaxe.


Oh c'est sympa ça, j'y avais pas pensé. J'en vois pas trop l'utilité car
effectivement j'ai jamais eu de problèmes avec mes valeurs par défaut
qui changent pas dans le temps, mais je viens à peine de conceptualiser
ce que tu suggères là et je trouve cette solution agréable :)

J'avais pensé à un système de tableau sinon, du genre

<?php
function search($params) {
$auteur = (isset($params['auteur']))? $params['auteur']:"*";
$categorie = (isset($params['categorie']))? $params['categorie']:"*";
$genre = (isset($params['genre']))? $params['genre']:"*";
$titre = (isset($params['titre']))? $params['titre']:"*";
// traitement des cas en fonction des paramêtres existants
return $new_search;
}
?>

Et les appels avec

<?php
$my_test = search(array(
'categorie'=>2,
'titre'=>'blabla'
));
?>

Mais après réflexion, ça semble un peu lourd à mettre en oeuvre.

Laurent

--
http://mokhet.com/