2011-02-03 2 views
2

Est-il possible, en php, pour transmettre des variables à des fonctions comme ceci:

function myfunction($var1="bar", $var2="foo"){ 
echo $var1 . $var2; 
} 

myfunction($var2="bar"); 

et obtenir la sortie suivante: barbar?

Cordialement Kristoffer

+0

Non, vous pouvez Fais pas ça! –

Répondre

8

Non, les paramètres nommés ne sont pas pris en charge en PHP.

Une alternative est de passer un tableau associatif d'arguments et de comparer/fusionner avec un ensemble de valeurs par défaut. Maladroit, mais fonctionne et est un modèle assez commun dans certaines bibliothèques et cadres là-bas:

function myfunction($args = array()) { 
    $defaults = array('var1' => 'bar', 'var2' => 'foo'); 
    extract(array_merge($defaults, $args)); 
    echo $var1 . $var2; 
} 

myfunction(array('var2' => 'bar')); 
0

Les paramètres nommés sont not yet en PHP. Il existe quelques solutions de contournement pour y parvenir. JSON ou le passage de tableau est un. Mais certaines fonctions PHP builtin utilisent cette méthode pour spurios valeurs par défaut:

function yourfunction($var1=NULL, $var2=NULL) { 
    $var1 or $var1 = "bar"; 
    $var2 or $var2 = "foo"; 
    $var3 or $var3 = "jip"; 

    echo $var1 . $var2; 
} 

Lorsque la syntaxe d'appel serait:

yourfunction(null, "baz"); 

Il est sémantiquement plus basé sur des paramètres indexés, et non ceux nommés. Et l'astuce est d'avoir par défaut defered dans le code d'initialisation de la fonction (beaucoup de type semblable vérification, etc.)

Une option plus loufoque (utilisable uniquement avec scalaires) sont des paramètres JSON ou url:

yourfunction("var2=bar;var3=xyz"); 
yourfunction('{"var2":"bar"}'); // very debatable 
+0

Je ne pense pas que la syntaxe de court-circuit va fonctionner si une fonction accepte les paramètres 'false', zero, blank ou' NULL'. En outre, sont nommés des paramètres à venir? J'ai entendu pour la dernière fois une décision unanime (par l'équipe) contre cela. – BoltClock

+0

@BoltClock: De toute évidence, il faut plus de réglages pour les cas de bords (approche impossible pour NULL). IIRC la fonctionnalité a été démarrée parce que l'analyseur à nouveau ne peut pas facilement le prendre en charge. Pourtant programmers.SE l'a voté, alors ils vont mieux le mettre en œuvre bientôt. – mario

Questions connexes