通过引用传递参数
函数参数可以通过 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
值的函数 - 然后在函数中修改
- 最终定义为调用上下文中的地址和端口。