Đã bao giờ bạn code một đoạn có dạng như sau:
$arr = array('HuyPV', 'NinhND');
foreach ($arr as &$e) {
if ($e == 'NinhND') {
$e = 'TanNV';
}
}
foreach ($arr as $e) {
echo $e . '-'; // Do something with $e
}
Theo bạn đoạn code trên sẽ in ra gì: HuyPV-TanNV-
Không nó sẽ in ra HuyPV-HuyPV-
Nguy hiểm chưa?!!!
Giải pháp là:
- Cách 1: Không dùng reference trong foreach nữa
foreach ($arr as $index => $ele) {
if ($ele == 'NinhND') {
$arr[$index] = 'TanNV';
}
}
- Cách 2: Luôn luôn unset biến sau khi sử dụng tham chiếu trong foreach
foreach ($arr as &$e) {
if ($e == 'NinhND') {
$e = 'TanNV';
}
}
unset($e);
- Cách 3: Sử dụng tên biến khác
foreach ($arr as $e2) {
echo $e2 . '-'; // Do something with $e2
}
Khuyến cáo là nên dùng cách 1 hoặc cách 2.
Title:
PHP - Lỗi thường gặp khi sử dụng tham chiếu trong vòng lặp foreach
Description:
Đã bao giờ bạn code một đoạn có dạng như sau: $arr = array('HuyPV', 'NinhND'); foreach ($arr as &$e) { if ($e == ...
...
Rating:
4