<?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;
答案 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
?>