圖中程式碼在瀏覽器中可以正常執行,但是跑到 PHP 裡面卻成了死迴圈。因為陣列在 js 中是按引用傳值的,但在 PHP 中卻是按值傳遞的。
使用 & 符合可以強制陣列傳遞引用,如下所示
function fetch($arr)
{
return array_pop($arr);
}
function exist($n)
{
return $n ?: false;
}
$arr = array(1, 2, 3, 4, 5, 6); // v5.3 不能使用 []
while (exist(fetch(&$arr))) { // 必須加上 &
print_r($arr);
}
但是這麼做的缺點很明顯,首先定義陣列比較麻煩,不能使用 [ ] 了。更重要的是使用 & 傳遞引用的辦法只能適用於 PHP5.3 及以下的版本
如果一定要傳遞陣列的引用,PHP7、8 裡面咋整?感謝 php_yt 指點迷津!雖然高階版本不支援呼叫時加 & 的寫法,但卻支援函式定義時新增 & 的寫法
本作品採用《CC 協議》,轉載必須註明作者和本文連結