最近我正在研究“通过参考传递”,我开始了解以下方式
以下方法之间的主要区别是什么。
1
function foo(&$var)
{
$var++;
}
$a=5;
foo($a);
2
function foo($var)
{
$var++;
}
$a=5;
foo(&$a);
3
function foo(&$var)
{
$var++;
}
function &bar()
{
$a = 5;
return $a;
}
foo(bar());
即使它们都产生相同的结果,这也是最好的合作方式。
感谢。
答案 0 :(得分:5)
function foo(&$var)
{
$var++;
}
$a=5;
foo($a);
这接受始终通过引用传递的参数(&
在foo(&$var)
中)。传递$a
时,它始终作为引用,因此在函数内增加变量将导致参数被修改。
function foo($var)
{
$var++;
}
$a=5;
foo(&$a);
不要使用此功能。这是调用时传递引用(您将&$a
(对$a
的引用传递到函数中),从PHP 5.3.0开始,已弃用。这是不好的做法,因为该函数不会期望引用。
function foo(&$var)
{
$var++;
}
function &bar()
{
$a = 5;
return $a;
}
foo(bar());
这会将引用(&
在&bar()
中)返回到函数$a
中声明的变量bar()
。然后它引用bar()
的返回值并递增它。我不确定为什么这会有用,特别是对于原始/标量类型。
答案 1 :(得分:3)
第二种方法已弃用,不应使用。
通常,函数应该只返回值。
function foo($a)
{
$a = 5;
}
$a = foo($a);
这基本上就是第三种方法。不确定为什么你通过引用包含嵌入式传递。
通常应该避免通过引用传递(对于标量和数组),因为它不如返回值清晰。但是,在需要在一个函数调用中修改多个值时,它可能很有用。
请注意,在PHP5中,如果您只是想修改原始对象,则甚至不需要通过引用显式传递对象,因为对象的句柄将指向与传递给函数的对象相同的对象。 / p>
答案 2 :(得分:1)
最后一个例子不等同于前两个例子。如果在调用$a
后打印foo
的值,您会看到它未定义。第三个基本上是混淆的无操作。