Rumah >pembangunan bahagian belakang >tutorial php >Mengapakah Gelung Foreach Rujukan PHP Menunjukkan Gelagat Tidak Dijangka?
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!