Memahami Gelagat Pelik bagi Gelung Foreach Rujukan PHP
Dalam PHP, gelung foreach berulang ke atas elemen dalam tatasusunan atau objek. Walau bagaimanapun, apabila menggunakan rujukan dalam gelung (cth., foreach ($a sebagai &$v) { ... }), tingkah laku yang tidak dijangka boleh berlaku.
Masalahnya
Pertimbangkan skrip PHP berikut:
$a = array('a', 'b', 'c', 'd'); foreach ($a as &$v) { } foreach ($a as $v) { } print_r($a);
Dijangka Output:
Suatu tatasusunan dengan elemen 'a', 'b', 'c' dan 'd'.
Output Sebenar:
Array ( [0] => a [1] => b [2] => c [3] => c )
Penjelasan
Tingkah laku yang tidak dijangka timbul kerana rujukan dicipta dalam gelung foreach berterusan selepas gelung ditamatkan. Khususnya, elemen terakhir dalam tatasusunan $a masih boleh dirujuk oleh pembolehubah $v.
Apabila gelung foreach kedua dijalankan, $v (rujukan kepada elemen terakhir dalam $a) ditetapkan semula nilai setiap elemen dalam tatasusunan. Memandangkan $v ialah rujukan kepada elemen terakhir dalam $a, elemen tatasusunan yang sepadan diubah suai.
Resolusi
Untuk mengelakkan tingkah laku ini, sentiasa nyahset pembolehubah rujukan selepas gelung foreach selesai:
$a = array('a', 'b', 'c', 'd'); foreach ($a as &$v) { } unset($v); foreach ($a as $v) { } print_r($a);
Output:
Array ( [0] => a [1] => b [2] => c [3] => d )
Atas ialah kandungan terperinci Mengapakah Gelung Foreach Rujukan PHP Menunjukkan Gelagat Tidak Dijangka?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!