为什么echo $ var是不同的

时间:2012-01-01 12:23:08

标签: php

<?php
function f(& $var){$var = rand(); return $var;}
echo f($var ="a_").'<br/>'; /* outpu a random number */
echo $var.'<br/>'; /*but don't change global variables, it still is "1<br/>", no the same like up line */
echo f($var).'<br/>'; /* outpu a random number */
echo $var.'<br/>'; /* haved change, the same like up line */
?>

运行代码并输出文本,如块

  

28486
  A_
  25863个
  25863

Wwhy无法在第一次通话中更改$var吗?

<?php
function f(& $var, & $isRefer){$var = rand(); global $gVar; var_dump(array('are they same?' => $isRefer === $gVar)); return $var;}
$gVar = 'global var';
echo f($var ="a_", $gVar = & $gVar).'<br/>'; /* outpu a random number */
echo $var.'<br/>'; /*but don't change global variables, it still is "1<br/>", no the same like up line */
echo f($var, $gVar).'<br/>'; /* outpu a random number */
echo $var.'<br/>'; /* haved change, the same like up line */
?>

- 代码输出如 -

  

array(1){     [&#34;他们是一样的吗?&#34;] =&gt;     布尔(真)   }   14802   一个_   array(1){     [&#34;他们是一样的吗?&#34;] =&gt;     布尔(真)   }   19107   19107

所以我认为它是f($var = 'd')的传递价值&#34;参考&#34;

3 个答案:

答案 0 :(得分:1)

f($var ="a_");

不会将$ var作为参数传递给f(),但会将该赋值的结果传递给f()...这是一个未分配的字符串值,等于您为tp $ var指定的字符串(假设赋值成功),但不是对$ var本身的引用。这就是分配$ var的原因,但不会被f()

更改

答案 1 :(得分:1)

通过引用传递变量是函数调用的一个特例。通常只将表达式的值作为参数传递给函数。

f(3 * 4);

此处3 * 4是一个计算结果为12的表达式,因此将12传递给函数。期望变量通过引用传递的函数虽然不同,因为它需要一个变量:

function f(&$var) { ... }

通过引用传递的目的是能够修改传递的变量,而不仅仅是一个值。因此,您需要实际传递一个变量,而不仅仅是一个值。在这种情况下,使用类似f(3 * 7)的函数调用函数没有多大意义。好吧,f($var = 'foo')是一回事。 $var = 'foo'是一个表达式,它不仅仅是一个变量。因此,只传递表达式(值)的结果,而不是恰好出现在表达式中的任何变量。

为了更好地说明,在执行f($foo + $bar)时应该传递哪个变量?答案是它不会那样工作。要通过引用传递变量,只能使用变量作为参数,而不能使用表达式。

f($var);

答案 2 :(得分:0)

这个问题让我困惑。

所以这是你的初始代码:

<?php
function f(& $var){
    $var = rand();
    return $var;
}
echo f($var ="a_").'<br/>'; /* outpu a random number */
echo $var.'<br/>'; /*but don't change global variables, it still is "1<br/>", no the same like up line */
echo f($var).'<br/>'; /* outpu a random number */
echo $var.'<br/>'; /* haved change, the same like up line */
?>

在你的函数中,我传递给它的并不重要,因为第二行$var = rand();总是会覆盖传递给函数的任何值。

所以,如果我在第一行之后f("jordanmoore");这不再是“jordanmoore”,那么它将是一个随机值。

接下来是这一行:echo f($var ="a_").'<br/>'; /* outpu a random number */

我不确定你为什么要在这里设置$var。如果您想将“a_”传递给该函数,则只需调用f("a_");即可。但是我不确定为什么当值总是被覆盖时你将任何东西传递给函数。如果您希望格式为“a_somerandomnumber”,那么使用echo "a_".f(null);会更好吗?

我将在这里犹豫不决,并将您的功能重写为以下

<?php
function f(& $var=null){
    $var = rand();
    return $var;
}
?>

然后你可以像这样使用它:

<?php
function f(& $var=null){
    $var = rand();
    return $var;
}

echo f(); //output a random number
echo "a_".f(); //out put a_ with a random number after the underscore
$myRandomVariable = f(); //put a random number in a variable
echo $myRandomVariable; //echo this variable
echo "a_".$myRandomVariable; //echo this variable after a_
echo "a_$myRandomVariable"; //same as above
?>

希望这有帮助。

修改

您也可以这样做:

<?php
function f(& $var=null){
    $var = rand();
    return $var;
}
$myValue = 0;
f($myValue); //store a random number in "$myValue"
echo $myValue; //echo the random number
?>