12
votes

PHP passe l'argument par défaut pour fonctionner

J'ai une fonction PHP, comme ceci: xxx

Ce que je veux faire, appelle cette fonction avec l'argument par défaut de $ FOO passée, mais $ bar définie à vrai, comme Ceci (plus ou moins) xxx

Comment puis-je le faire? Comment passer un argument en tant que valeur par défaut de la fonction sans savoir que la valeur?

Merci d'avance!


3 commentaires

Qu'est-ce que je pense en ce moment .. pourrait-il y avoir aussi une valeur comme Void? Je veux dire, NULL est une valeur, mais au moins en Java, le néant peut être apporté une étape plus loin, en utilisant le vide. Au moins comme la valeur de retour d'une fonction, s'il renvoie non seulement NULL, mais en fait rien.


Il n'y a pas de tel "vide" en php. "" et null est identique


Incroyable que tant de personnes sur cette page ont complètement manqué le point de la question (je pensais que c'était assez clair).


5 Réponses :


12
votes

Ceci n'est pas de nature possible dans PHP. Il existe des travaux de contournement comme utiliser des tableaux pour réussir tous les paramètres au lieu d'une rangée d'arguments, mais ils ont des descendances massives .

La meilleure solution de contournement manuelle que je peux penser est de définir une constante avec une valeur arbitraire qui ne peut pas entrer en collision avec un valeur réelle. Par exemple, pour un paramètre qui ne peut jamais être -1 : xxx

et test pour cela: xxx


0 commentaires

3
votes

Mettez-les à l'inverse:

function($bar = false, $foo = 12345){}

function(true);


3 commentaires

Je ne peux pas, car j'utilise déjà cette fonction dans un énorme terrain: D


@ Arik-si réfracteur puis, Freddie, la façon de le faire, c'est exactement ce que j'allais répondre


Habituellement, vous n'avez pas trop d'endroits les derniers paramètres les plus extrêmes, et si vous en avez, ils devraient probablement être sur les lieux les plus «front»



3
votes

L'approche habituelle à cet égard est que si (is_null ($ foo)) code> la fonction le remplace avec la valeur par défaut. Utilisez une chaîne null, vide, etc. pour "sauter" des arguments. C'est ainsi que les fonctions PHP les plus intégrées nécessaires à sauter des arguments le font.

<?php
function($foo = null, $bar = false)
    {
    if (is_null($foo))
        {
        $foo = 12345;
        }
    }
?>


3 commentaires

Eh bien, dans mon cas, l'argument étant une chaîne, NULL est une valeur acceptable ^^ en fait, dans mon cas, plus ou moins tout est une valeur acceptable.


Ah, c'est beaucoup mieux que ma réponse, j'en ai déjà utilisé cela avant, mais j'en ai oublié. Je suis sûr que certains puristes se disputeraient avec l'approche.


@ Arik-Donc, vous pouvez également faire une comparaison de type pour voir si null est en réalité null et non une chaîne vide (A la === )



3
votes

php ne peut pas faire exactement cela, alors vous devrez travailler autour de cela. Puisque vous avez déjà besoin de la fonction sous sa forme actuelle, définissez simplement une autre:

function blah_foo($bar)
{
    blah(12345, $bar);
}

function blah($foo = 12345, $bar = false) { }


2 commentaires

Cela semble intéressant, aussi ^^ Considérant que toute valeur est acceptable, je pense que votre approche est la meilleure.


Je ferais très attention à introduire de nouvelles fonctions au code de quelque chose comme ça, cependant. Vous devez les documenter, les garder à l'esprit ... il est très facile de construire un code sous-optimal de cette façon



-2
votes

Je pense, il est préférable de tri en fonction de l'argument selon lequel le plus fréquemment changé, $ bar par exemple, nous l'avons mis en premier, xxx

alors quand vous Voulez-vous passer $ bar à true et $ foo to 12345 , vous faites cela, xxx


0 commentaires