通過引用傳遞引數

函式引數可以通過 By Reference 傳遞,允許函式修改函式外部使用的變數:

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

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

print $word;
  // Bannanas

物件引數始終通過引用傳遞:

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

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

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

為了避免通過引用隱式傳遞物件,你應該知道物件。

通過引用傳遞也可以用作返回引數的替代方法。例如,socket_getpeername 功能:

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

此方法實際上旨在返回對等體的地址和埠,但由於有兩個值要返回,因此它選擇使用引用引數。它可以像這樣呼叫:

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

變數 $address$port 不需要先定義。他們將:

  1. 首先被定義為 null
  2. 然後傳遞給具有預定義 null 值的函式
  3. 然後在函式中修改
  4. 最終定義為呼叫上下文中的地址和埠。