通過引用傳遞引數
函式引數可以通過 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
不需要先定義。他們將:
- 首先被定義為
null
, - 然後傳遞給具有預定義
null
值的函式 - 然後在函式中修改
- 最終定義為呼叫上下文中的地址和埠。