NikiC nêu tại another thread:Tại sao foreach tăng số lần truy cập bằng 2 thay vì 1?
Ngay trước [a foreach] lặp các
$array
được "mềm sao chép" cho sử dụng trong foreach. Điều này có nghĩa rằng không có bản sao thực tế được thực hiện, nhưng chỉ có refcount của zval của$array
được tăng lên 2.
Tuy nhiên, mã thử nghiệm của tôi được thể hiện một kết quả khác nhau:
$array = array(0, 1, 2);
xdebug_debug_zval('array'); // refcount=1, is_ref=0
// so far so good
foreach ($array as $key => $value) {
xdebug_debug_zval('array'); // refcount=3, is_ref=0
} // why is refcount 3 instead of 2?
Chỉ bằng nhìn vào mã, chúng ta có thể thấy tối đa hai biến mảng.
Tại sao phải nạp lại 3
?
Tại sao không nạp lại mã số 2
sau foreach
?
Trong vòng lặp foreach của bạn, bạn không nên tham khảo phần tử mảng của mình bằng biến $ value? – Crackertastic
@Crackertastic, tôi không sử dụng bất kỳ biến nào trong vòng lặp. – Pacerier
Tôi nhận được 'refcount' 2, tôi có thiếu gì đó không? 'mảng: (refcount = 2, is_ref = 0) = mảng (0 => (refcount = 1, is_ref = 0) = 0, 1 => (refcount = 1, is_ref = 0) = 1, 2 => (số lần truy cập = 2, is_ref = 0) = 2) ' – vee