コードをコピーします コードは次のとおりです:
$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 は配列のコピーである操作であるため、後の反復は次と同等です:
コードをコピー
コードは次のとおりです: for($i=0; $i$r = $b[$i]; // $a[1] = $b[$i] と同等です
この状況を回避するには、最初の反復後に実行する必要があります
コードをコピーします
コードは次のとおりです:
unset($r); $r 変数 (参照変数) を現在の環境から削除します。
前の例でなくても、最初の反復ではその後、同様のステートメントを再度実行する可能性が非常に高くなります:
コードをコピーします
コードは次のとおりです:
$r = 123; ループ変数は通常、一時変数であり、同じ変数名がコード内の異なる場所で表されます。ただし、変数のスコープはループの外に存在します。これは、このスコープ ルールの欠点です。 「変数が宣言されずに使用される」という欠点に加えて、変数に型がないという欠点もあります
したがって、PHP で参照変数を使用する場合は、参照が使用された後にすべての変数を unset() する必要があります。 ) 使用前に。
http://www.bkjia.com/PHPjc/325872.html
www.bkjia.com
true
http://www.bkjia.com/PHPjc/325872.html技術記事次のようにコードをコピーします: $a = array(1, 2); $b = array(11, 12); foreach($a as // 出力 12. 2 つのループの本来の目的は次のとおりです。ループに入るように要素の内容を変更します...