J'ai écrit une fonction PHP qui peut accepter 10 paramètres, mais seulement 2 sont nécessaires. Parfois, je veux définir le huitième paramètre, mais je ne veux pas taper des chaînes vides pour chacun des paramètres jusqu'à ce que j'atteigne le huitième.
Une idée que j'ai eue était de passer une fonction abstraite avec un tableau de paramètres qui la transmet à la fonction réelle.
Existe-t-il une meilleure façon de configurer la fonction afin que je puisse transmettre uniquement les paramètres que je veux?
php
function
parameter-passing
user481826
la source
la source
Réponses:
Faites en sorte que la fonction prenne un paramètre: un tableau. Transmettez les paramètres réels en tant que valeurs dans le tableau.
Edit: le lien dans le commentaire de Pekka résume à peu près tout.
la source
Ce que j'ai fait dans ce cas, c'est de passer un tableau, où la clé est le nom du paramètre et la valeur est la valeur.
la source
Pour accomplir ce que vous voulez, utilisez un tableau comme l'a dit Rabbot (bien que cela puisse devenir difficile à documenter / maintenir s'il est utilisé de manière excessive). Ou utilisez simplement les arguments optionnels traditionnels.
Cependant, je trouve généralement que lorsque je commence à écrire une fonction / méthode avec autant d'arguments - le plus souvent, c'est une odeur de code, et peut être re-factorisée / abstraite en quelque chose de beaucoup plus propre.
la source
Dans PHP 5.6 et versions ultérieures, les listes d'arguments peuvent inclure le jeton ... pour indiquer que la fonction accepte un nombre variable d'arguments. Les arguments seront passés dans la variable donnée sous forme de tableau; par exemple:
Exemple d'utilisation de ... pour accéder aux arguments de variable
L'exemple ci-dessus affichera:
Liste d'arguments de longueur variable Documentation PHP
la source
Vous pouvez simplement définir la valeur par défaut sur null.
la source
null
par les non-bits du type de date. par exemplearray()
pour les tableauxREMARQUE: Ceci est une ancienne réponse, pour PHP 5.5 et inférieur. PHP 5.6+ prend en charge les arguments par défaut
En PHP 5.5 et inférieur, vous pouvez y parvenir en utilisant l'une de ces 2 méthodes:
Comment utiliser
Je préfère la deuxième méthode car elle est propre et facile à comprendre, mais parfois vous aurez besoin de la première méthode.
la source
$x = null; if ($x) echo "true"; else echo "false";
affichera "false", même si le $ x var a une valeur ("null" dans ce code). De plus, dans les deux méthodes, nous utilisons l'opérateur ternaire, il est donc correct d'utiliser un seul "=". Si vous testez avecmethod(); method(1); method(1, 2);
, alors le premier appel associera arg1 et arg2 aux valeurs par défaut, le second appel associera le second arg à la valeur par défaut et "1" pour le premier argument. Le dernier appel n'associera pas les valeurs par défaut.Je pense que vous pouvez également utiliser des objets comme paramètres de transport.
Bien sûr, vous devez définir les valeurs par défaut pour "optParam8" et "optParam2" dans cette fonction, dans les autres cas, vous obtiendrez "Remarque: propriété non définie: stdClass :: $ optParam2"
Si vous utilisez des tableaux comme paramètres de fonction, j'aime cette façon de définir les valeurs par défaut:
la source
Si seulement deux valeurs sont nécessaires pour créer l'objet avec un état valide, vous pouvez simplement supprimer tous les autres arguments facultatifs et leur fournir des setters (sauf si vous ne voulez pas qu'ils soient modifiés à l'exécution). Ensuite, instanciez simplement l'objet avec les deux arguments requis et définissez les autres selon les besoins via le setter.
Lectures complémentaires
la source
Je sais que c'est un ancien message, mais j'avais un problème comme l'OP et c'est ce que j'ai proposé.
Exemple de tableau que vous pourriez passer. Vous pouvez le commander à nouveau si une commande particulière était requise, mais pour cette question, cela fera ce qui est demandé.
Ceci est gérable, facile à lire et les points d'extraction de données peuvent être ajoutés et supprimés à un moment donné n'importe où dans le codage et évitent toujours une réécriture massive. J'ai utilisé des clés entières pour correspondre à la question originale OP, mais les clés de chaîne pourraient être utilisées tout aussi facilement. En fait pour la lisibilité je le conseillerais.
Collez-le dans un fichier externe pour plus de facilité
mettez ceci au début si le fichier.
Utilisez-les simplement pour attribuer le prochain élément de données, utilisez la numérotation / la dénomination en fonction de la provenance des données.
Et enfin passer le tableau
la source
Vous pouvez créer une fonction régulière, puis ajouter vos variables facultatives en leur donnant une valeur Null par défaut.
Un Null est toujours une valeur, si vous n'appelez pas la fonction avec une valeur pour cette variable, elle ne sera pas vide donc pas d'erreur.
la source
Si vous ne passez généralement que la 8ème valeur, vous pouvez réorganiser vos paramètres afin que ce soit le premier. Il vous suffit de spécifier les paramètres jusqu'au dernier que vous souhaitez définir.
Si vous utilisez des valeurs différentes, vous avez 2 options.
La première consisterait à créer un ensemble de fonctions wrapper qui prennent différents paramètres et définissent les valeurs par défaut sur les autres. Ceci est utile si vous n'utilisez que quelques combinaisons, mais peut rapidement devenir très compliqué.
L'autre option est de passer un tableau où les clés sont les noms des paramètres. Vous pouvez alors simplement vérifier s'il y a une valeur dans le tableau avec une clé, et sinon utiliser la valeur par défaut. Mais encore une fois, cela peut devenir compliqué et ajouter beaucoup de code supplémentaire si vous avez beaucoup de paramètres.
la source
PHP autorise les arguments par défaut ( lien ). Dans votre cas, vous pouvez définir tous les paramètres de 3 à 8 comme NULL ou comme une chaîne vide "" en fonction de votre code de fonction. De cette manière, vous pouvez appeler la fonction uniquement en utilisant les deux premiers paramètres.
Par exemple:
la source
echo " this is arg3: " . $arg3;
, etc., vous verrez que l'appel par exempleyourFunction(3, 2, $arg8=5);
imprimera32 this is arg3: 5
. Le problème est que la position du paramètre compte toujours lors du passage de paramètres optionnels dans PHP ... noms de paramètres ne suffisent pas pour mapper les valeurs des paramètres aux noms des paramètres.Définissez simplement Null pour ignorer les paramètres que vous ne souhaitez pas utiliser, puis définissez le paramètre nécessaire en fonction de la position.
la source
la source
default
est un mot - clé en PHP .