PHP Passage d'arguments par référence


Exemple

Les arguments de fonction peuvent être transmis "By Reference", permettant à la fonction de modifier la variable utilisée en dehors de la fonction:

function pluralize(&$word)
{
    if (substr($word, -1) == 'y') {
        $word = substr($word, 0, -1) . 'ies';
    } else {
      $word .= 's';
    }
}

$word = 'Bannana';
pluralize($word);

print $word;
  // Bannanas

Les arguments d'objet sont toujours passés par référence:

function addOneDay($date)
{
    $date->modify('+1 day');
}

$date = new DateTime('2014-02-28');
addOneDay($date);

print $date->format('Y-m-d');
  // 2014-03-01

Pour éviter la transmission implicite d'un objet par référence, vous devez clone l'objet.

Le passage par référence peut également être utilisé comme un autre moyen de renvoyer des paramètres. Par exemple, la fonction socket_getpeername :

bool socket_getpeername ( resource $socket , string &$address [, int &$port ] )

Cette méthode vise en fait à renvoyer l'adresse et le port de l'homologue, mais comme il y a deux valeurs à renvoyer, elle choisit plutôt d'utiliser des paramètres de référence. On peut l'appeler comme ceci:

if(!socket_getpeername($socket, $address, $port)) {
    throw new RuntimeException(socket_last_error());
}
echo "Peer: $address:$port\n";

Les variables $address et $port n'ont pas besoin d'être définies auparavant. Ils vont:

  1. être défini comme null premier,
  2. puis passé à la fonction avec la valeur null prédéfinie
  3. puis modifié dans la fonction
  4. finis défini comme l'adresse et le port dans le contexte d'appel.