如果引用变量,为什么不使用return($ var)?

时间:2016-10-27 18:17:54

标签: php

正如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;

 ?>

4 个答案:

答案 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,