プログラミング入門 PHPで参照渡しする際の注意
参照渡しを使う際は要注意

以下のコードをご覧ください。
<?php
$myArr = ['apple', 'orange', 'bana'];
function hoge(&$arr, $fruit){
foreach ($arr as &$item){
if($item == $fruit){
$item = $fruit . ' match';
}
}
$item = 'end';
array_push($arr,$item);
}
hoge($myArr, 'orange');
print_r($myArr);
?>
このコードでは二つ参照渡しを使っています。ひとつは&$arrで、もうひとつは&$itemです。
実はこのコードにはバグがあります。
上記のprint_rの結果は以下になり、配列の最後の要素が上書きされてしまっています。
Array
(
[0] => apple
[1] => orange match
[2] => end
[3] => end
)
$itemは参照渡しなので、foreach文によって配列の最後の要素が$itemに入った状態で、$item = 'end’ が実行されるので、上書きされてしまっているというわけです。
for文で参照渡しした際は、その後にunsetをするようにしましょう。
<?php
$myArr = ['apple', 'orange', 'bana'];
function hoge(&$arr, $fruit){
foreach ($arr as &$item){
if($item == $fruit){
$item = $fruit . ' match';
}
}
unset($item);
$item = 'end';
array_push($arr,$item);
}
hoge($myArr, 'orange');
print_r($myArr);
?>
ディスカッション
コメント一覧
まだ、コメントがありません