Les arguments de fonction
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 (comportement par d�faut), le passage par r�f�rence, et des valeurs d'arguments par d�faut. Une liste variable d'arguments est �galement support�e, voir la documentation sur les fonctions func_num_args(), func_get_arg(), et func_get_args() pour plus d'informations.
Exemple #1 Nombre variable d'argument sous forme de tableau
<?php
function takes_array($input)
{
echo "$input[0] + $input[1] = ", $input[0]+$input[1];
}
takes_array(array(2,3));
?>
L'exemple ci-dessus va afficher :
2 + 3 = 5
Passage d'arguments par r�f�rence
Par d�faut, les arguments sont pass�s � la fonction par valeur (Ainsi changer la valeur d'un argument dans la fonction 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 #2 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;
?>
L'exemple ci-dessus va afficher :
Ceci est une cha�ne, et un peu plus.
Valeur par d�faut des arguments
Vous pouvez d�finir comme en C++ des valeurs par d�faut pour les arguments de type scalaire :
Exemple #3 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(null);
echo servir_cafe("espresso");
?>
L'exemple ci-dessus va afficher :
Servir un cappuccino. Servir un. Servir un espresso.
PHP vous autorise � utiliser des tableau ainsi que le type sp�cial NULL comme valeur par d�faut, par exemple :
Exemple #4 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");
?>
L'exemple ci-dessus va afficher :
Pr�paration d'une tasse de cappuccino avec les mains. Pr�paration d'une tasse de cappuccino, lavazza avec 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 #5 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 :
PHP Warning: Missing argument 2 for faireunyaourt(), called on line 2 Warning: Missing argument 2 for faireunyaourt(), called on line 2 Pr�parer un bol de framboise .
Maintenant comparons l'exemple pr�c�dent avec l'exemple suivant :
Exemple #6 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.
Nombre d'arguments variable
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.