Je ne comprends pas bien les valeurs par défaut des fonctions PHP. Disons que j'ai une fonction comme celle-ci :
function foo($blah, $x = "some value", $y = "some other value") {
// code here!
}
Que faire si je veux utiliser l'argument par défaut pour $x et définir un argument différent pour $y ?
J'ai expérimenté différentes méthodes et je suis de plus en plus confus. Par exemple, j'ai essayé ces deux-là :
foo("blah", null, "test");
foo("blah", "", "test");
Mais ces deux méthodes ne permettent pas d'obtenir un argument par défaut correct pour $x. J'ai également essayé de le définir par nom de variable.
foo("blah", $x, $y = "test");
Je m'attendais vraiment à ce que quelque chose comme ça fonctionne. Mais ça ne fonctionne pas du tout comme je l'espérais. Il semble que quoi que je fasse, je vais devoir finir par saisir les arguments par défaut à chaque fois que j'invoquerai la fonction. Et je dois manquer quelque chose d'évident.
88 votes
Vous ne manquez probablement rien, ce sont les développeurs PHP qui ont probablement manqué cela.
0 votes
C'est une question intéressante. Je n'ai jamais eu besoin de le faire comme vous l'avez dit puisque je n'utilise les args par défaut que pour étendre les fonctions héritées par d'autres programmeurs lorsque je ne suis pas sûr de ce qui dépend de l'original. Je suis curieux de connaître la réponse.
3 votes
Une des meilleures questions que j'ai vues depuis longtemps ! Avez-vous essayé de ne rien faire passer ?
foo("blah", , "test");
?3 votes
La règle est que les arguments par défaut ne peuvent que suivre les arguments. C'est-à-dire que vous pourriez avoir foo("blah") et x,y sont des arguments par défaut, ou foo("Blah", "xyz") et y est l'argument par défaut.
0 votes
Quel est le comportement que vous obtenez ? Votre code semble correct !
0 votes
@ThinkingMonkey, eh bien, lorsque je mets null ou "" pour la deuxième valeur par défaut, cela remplace la valeur par défaut par null... quant à foo("blah", $x, $y = "test) ; j'obtiens une variable indéfinie pour $x. Si je fais quelque chose comme foo("blah", $y = "test") ; il remplace la valeur $x par test au lieu de $y.
0 votes
Duplicata possible de " Comment puis-je sauter les arguments facultatifs dans un appel de fonction ? " .
2 votes
Comportement attendu. Voir la section "Valeurs par défaut des arguments" dans : php.net/manual/fen/functions.arguments.php -- La valeur nulle et la chaîne vide sont acceptées comme arguments réels de la fonction.
0 votes
Vous pourriez simplement envoyer un tableau et le traiter comme vous le souhaitez.
0 votes
J'ai tendance à utiliser un mélange - soit un tableau et une fonction personnalisée.
getArrayValue($array, $key, $default)
- si $key n'existe pas dans $array, $default est retourné, ou j'utilisefunction doSomething($a, $b = null, $c = null)
et utiliserif(is_null($b)) $b = $bDefault)
dans le corps de la fonction. De cette façon, je peux appelerdoSomething("bob", null, "fred")
et le null sera remplacé par la valeur par défaut de $b.