Des informations peuvent être passées Ã
une fonction en utilisant une liste d'arguments, dont chaque
expression est séparée par une virgule.
PHP supporte le passage d'arguments
par valeur
(méthode par défaut),
par référence.
Les listes variables d'arguments sont supportées par PHP 4
et les versions plus récentes. Voir
liste variable d'arguments de fonction
et les fonctions utiles que sont func_num_args(),
func_get_arg(), et func_get_args().
On peut arriver au même résultat en PHP 3 en passant
un tableau comme argument de la fonction :
Exemple 17-5. Nombre variable d'argument sous forme de tableau
<?php function takes_array($input) { echo "$input[0] + $input[1] = ", $input[0]+$input[1]; } ?>
|
|
Par défaut, les arguments sont passés
à la fonction par valeur (donc vous pouvez
changer la valeur d'un argument dans la fonction, cela ne
change pas sa valeur à l'extérieur de la
fonction). Si vous voulez que vos fonctions puissent
changer la valeur des arguments, vous devez passer ces
arguments par référence.
Si vous voulez qu'un argument soit toujours passé
par référence, vous pouvez ajouter un '&'
devant l'argument dans la déclaration de la fonction :
Exemple 17-6. Passage d'arguments par référence
<?php function add_some_extra(&$string) { $string .= ', et un peu plus.'; } $str = 'Ceci est une chaîne'; add_some_extra($str); echo $str; // affiche 'Ceci est une chaîne, et un peu plus.' ?>
|
|
Vous pouvez définir comme en C++ des valeurs par
défaut pour les arguments de type scalaire :
Exemple 17-7. Valeur par défaut des arguments de fonctions
<?php function servir_cafe ($type = "cappuccino") { return "Servir un $type.\n"; } echo servir_cafe(); echo servir_cafe("espresso"); ?>
|
|
L'exemple ci-dessus va afficher :
Servir un cappuccino.
Servir un espresso. |
PHP vous autorise à utiliser des tableaux ainsi que le type spécial
NULL comme valeur par défaut, par exemple :
Exemple 17-8. Utilisation de type non scalaire comme valeur par défaut
<?php function servir_cafe($types = array("cappuccino"), $coffeeMaker = NULL) { $device = is_null($coffeeMaker) ? "les mains" : $coffeeMaker; return "Préparation d'une tasse de ".join(", ", $types)." avec $device.\n"; } echo servir_cafe(); echo servir_cafe(array("cappuccino", "lavazza"), "une cafetière"); ?>
|
|
La valeur par défaut d'un argument doit
obligatoirement être une constante, et ne peut être
ni une variable, ni un membre de classe, ni un appel de fonction.
Il est à noter que si vous utilisez des arguments avec
valeur par défaut avec d'autres sans valeur par défaut,
les premiers doivent être placés à la suite de tous les paramètres sans
valeur par défaut. Sinon, cela ne fonctionnera pas.
Considérons le code suivant :
Exemple 17-9.
Les arguments à valeur par défaut doivent être en premier : erreur
<?php function faireunyaourt ($type = "acidophilus", $flavour) { return "Préparer un bol de $type $flavour.\n"; }
echo faireunyaourt("framboise"); // ne fonctionne pas comme voulu ?>
|
|
L'exemple ci-dessus va afficher :
Warning: Missing argument 2 in call to makeyogurt() in
/usr/local/etc/httpd/htdocs/php3test/functest.html on line 41
Préparer un bol de framboise. |
Maintenant comparons l'exemple précédent avec
l'exemple suivant :
Exemple 17-10.
Les arguments à valeur par défaut doivent être en premier : valide
<?php function faireunyaourt ($flavour, $type = "acidophilus") { return "Préparer un bol de $type $flavour.\n"; }
echo faireunyaourt ("framboise"); // fonctionne comme voulu ?>
|
|
L'exemple ci-dessus va afficher :
Préparer un bol de acidophilus framboise. |
Note :
Depuis PHP 5, les valeurs par défaut peuvent être passées par référence.
PHP 4 et suivants supportent les fonctions à nombre d'arguments variable.
C'est très simple à utiliser, avec les fonctions
func_num_args(),
func_get_arg() et
func_get_args().
Aucune syntaxe particulière n'est nécessaire, et
la liste d'argument doit toujours être fournie
explicitement avec la définition de la fonction, et se
comportera normalement.