コードをコピー コードは次のとおりです。
$a = array(1, 2);
$b = array( 11, 12 );
foreach($a as &$r){
}
foreach($b as $r){
}
echo $a[1];出力 12
2 つのループの本来の目的は次のとおりです。最初のループはループ内の要素の内容を変更する必要があるため、参照を使用しますが、2 番目のループは $r を使用するだけです。しかし、なぜ $a[1] の値が変更されたのでしょうか?
$a の反復が完了すると、$r は $a[1] の値を変更します。 $r は $a [1] を変更することを意味します。このとき、コード内で $r が変更されておらず、$a[1] も変更されていないことに驚かれるかもしれません。
実際には、foreach は動作します。配列のコピー上で実行されるため、1 回の反復は以下と同等になります:
コードのコピー コードは次のとおりです:
>for($i=0; $i$r = $b[$i]; // $a[1] = $b と同等です! [$i];
}
この状況を回避するには、
Copy code を実行する必要があります。最初の反復のコードは次のとおりです:
unset($r);
現在の環境から $r 変数 (参照変数) を削除します。
前の例ではない場合でも、最初の反復の後、同様のステートメントを再度実行する可能性は十分にあります。
コードをコピー コード
$r = 123;
ループ変数は通常、コード内の異なる場所では異なるものを表します。変数のスコープはループの外に存在します。これがこのスコープ ルールの欠点であり、さらに「変数を宣言せずに使用できる」という欠点に加えて、変数には型がないという欠点もあります。 🎜>そのため、PHP で参照変数を使用する場合は、参照が使用された後でそれらを unset() する必要があります。使用する前に unset() する必要があります。