PHP 引用變數名與 foreach 中 $val 同名時發生的變化

yichengo發表於2018-12-18
<?php
$arr = ['a', 'b', 'c', 'd'];

//引用下標 2
$v = & $arr[2];

echo "<pre>";
// 引用變數$v  與 foreach中的賦值變數$v相同
foreach ($arr as $v)
{
    echo '當前$v=' . $v . "\n";
    print_r($arr);
    echo "\n";
}

憑直覺想一下,$v會輸出什麼?abcd?是不是不會這麼簡單?

輸出結果

當前$v=a
Array
(
    [0] => a
    [1] => b
    [2] => a //注意此處,此時由於$v與$arr[2]為引用關係,當$v值發生變化後,$arr[2]同樣發生變化
    [3] => d
)

當前$v=b
Array
(
    [0] => a
    [1] => b
    [2] => b //同理
    [3] => d
)

當前$v=b
Array
(
    [0] => a
    [1] => b
    [2] => b //同理
    [3] => d
)

當前$v=d
Array
(
    [0] => a
    [1] => b
    [2] => d //同理
    [3] => d
)
  • 引用時,多個變數共享一個記憶體地址,任意變數名值的變更,都會影響擁有同樣引用關係的變數。
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章