是我的号码不够好吗?


Is my number not good enough?

请原谅迟来的标题

这个问题与variable by reference有关。


假设我们有一个像这样的for循环:

for($i = 0; $i < 5; $i++) {
    $r = 15;
    $t = &$i + $r;
    array_push($a, $t);
}
预期输出:

Array
(
    [0] => 15
    [1] => 16
    [2] => 17
    [3] => 18
    [4] => 19
)
返回输出:

Array
(
    [0] => 0
    [1] => 1
    [2] => 2
    [3] => 3
    [4] => 4
)

但是如果我有这样的东西:

for($i = 0; $i < 5; $i++) {
    $r = 15;
    $num = &$i;
    $t = $num + $r;
    array_push($a, $t);
}

它返回与上述完全相同的预期结果。

有人能解释一下吗

我试一试…

在第二个例子中:

for($i = 0; $i < 5; $i++) {    
    $r = 15;
    $num = &$i;      // now $num and $i are the same thing - perfectly legitimate
    $t = $num + $r;  // equivalent to $t = $i + $r    
    array_push($a, $t);
}

而在第一个例子中:

for($i = 0; $i < 5; $i++) {
    $r = 15;
    $t = &$i + $r;   // $t and $i are the same thing. $r is not involved
    $t = &$i * "anything you want"; // this does exactly the same thing        
    array_push($a, $t);
}

请注意,在文档中,这些类型的赋值写得像$t =& $i,我认为这是一个有用的提醒,您只是在两个之间创建一个别名,而同一语句中的任何其他内容都是不相关的。