正如PHP手册所述
注意:在通过引用返回时,不应该在返回变量周围使用括号,因为这不起作用。您只能通过引用返回变量,而不能返回语句的结果。如果你使用return($ a);然后你不是返回一个变量,而是表达式的结果($ a)(当然,这是$ a的值)。
我无法理解为什么不能,而以下代码示例将给出相同的结果。
代码return $var
:
<?php
function a(&$a) {
$a .= "c";
return $a;
}
$b = "b";
echo a($b);
echo $b;
?>
代码return ($var)
:
<?php
function a(&$a) {
$a .= "c";
return ($a);
}
$b = "b";
echo a($b);
echo $b;
?>
答案 0 :(得分:1)
您显示的示例是PHP demo,您可以将变量的引用传递给函数。手册中的引用大约是函数中变量的Passing by Reference。
就像你不能通过引用传递表达式一样,你不能通过引用返回表达式,并且在a(abs($x));
中包装变量会将其转换为表达式。
a( ($x) );
但class a {
public $c = 0;
public function &b() { return $this->c; }
}
$a = new a;
$x = &$a->b();
$a->c = 1;
echo $x; // echos 1, because $x is a reference to $a->c that was changed
甚至return ( $this->c );
会产生:
严格标准:只应通过引用传递变量
{{1}}
但是,{{1}}会生成:
注意:只应通过引用
返回变量引用
答案 1 :(得分:1)
您提供的示例不关于returning references,但是passing references的示例。
function myfunc(&$arg) {
// here $arg has been passed by reference, nothing to do with the docs you quoted
}
文档是这样的:
function & myfunc($arg) {
// here you create your $result using $arg and whatever
return $result; // this will work
return ($result); // this will NOT
}
// and how you use it
$res =& myfunc(1);
答案 2 :(得分:0)
您正在修改变量,因为它是通过引用传递的。但是,然后您将其设置为该函数返回的值。这就是为什么你得到相同的结果。
通过引用修改变量时,您不需要返回它。如果您这样写,您的函数仍将具有相同的结果:
function a(&$a) {
$a .= "c";
}
答案 3 :(得分:0)
当你将任何值传递给函数时,php会复制该值并返回一个副本,而不是传递给函数的变量。因此,如果您想要更改值并且不想从您需要声明的函数返回任何内容,则将函数参数作为引用 - 这意味着您将传递给函数的任何变量都不会被php和内部操作复制该函数将更改函数外部的变量,例如:
$var = 1;
//not reference function
function notReference($argument)
{
$argument++;
}
notReference($var);
echo $var; // you will get 1
function reference(&$argument)
{
$argument++;
}
reference($var)
echo $var; // you will get 2,