Il est possible de passer des arguments à une fonction soit par valeur, soit par référence.
Les valeurs passées puis traitées par la fonction peuvent être des valeurs simples de tout type, y compris des tableaux.
function fonction($tableau)
{
foreach($tableau as $valeur)
{
$resultat *= $valeur;
}
return $resultat;
}
$valeurs = array(1, 2, 3, 4, 5);
echo fonction($valeurs); # retourne 120
Dans le premier cas, les arguments sont des valeurs passées à la fonction lors de l'appel de cette dernière. Ensuite, ces valeurs, affectées à leur variable respective dans la fonction, sont utilisées dans le bloc d'instructions.
<?php
function prefixe($pfx, $balise)
{
$balise = $pfx . '.' . $balise;
return $balise;
}
$balise = 'element_racine';
echo '<' . $balise . '>';
# retourne '<element_racine>'
echo '<' . prefixe('rso', $balise) . '>';
# retourne '<rso.element_racine>'
echo '<' . $balise . '>';
# retourne '<element_racine>'
?>
Dans cet exemple, la variable $variable définie dans la fonction ne modifie absolument pas la variable de même nom déclarée dans le programme appelant.
Ainsi, dans le cas d'un passage d'argument par valeur, la variable contenant cette valeur dans le programme appelant ne sera pas affectée par des opérations dans la fonction.
Néanmoins, il est possible de passer des arguments par référence. Cela entraîne la possiblité de modification des variables du programme appelant impliquées par la fonction.
// Passage d'arguments par référence sur la fonction
function incrementation(&$inc)
{
return $inc += 100;
}
$i = 0;
echo 'i = ' . $i; # affiche 0;
incrementation($i);
echo 'i = ' . $i; # affiche 100;
// Passage d'arguments par référence lors de l'appel de la fonction
function incrementation($inc)
{
return $inc += 100;
}
$i = 0;
echo 'i = ' . $i; # affiche 0;
incrementation(&$i);
echo 'i = ' . $i; # affiche 100;
incrementation($i);
echo 'i = ' . $i; # affiche 100 et non 200;
Le passage d'arguments par référence défini au niveau de la fonction implique une modification constante de la variable spécifiée, alors que si le passage par référence s'effectue lors de l'appel de la fonction, le résultat demeure le même tout en restant limité à cet appel.