私は上級試験のためにPHPを勉強しています。演習テストでは、最初の反復は 2 番目の反復よりも優れていることが示されました。理由がわかりません。どちらも配列の内容をうまく反復します。
// 最初の1つ:
foreach($array as $key => &$val) { /* ... */ }
// 二つ目:
foreach($array as $key => $val) { /* ... */ }
演習テストでは、最初の反復は 2 番目の反復よりも優れていることが示されました。
それは最善のアドバイスではありません。それらは、さまざまな仕事のためのさまざまなツールです。
&
コピーではなく参照によって変数を処理する手段。
変数参照がある場合、それは C のポインタに似ています。変数にアクセスすると、元の変数のメモリ位置にアクセスでき、別の識別子を使用してその値を変更できます。
// Some variable.
$a = 42;
// A reference to $a.
// & operator returns a reference.
$ref = &$a;
// Assignment of $ref.
$ref = "fourty-two";
// $a itself has changed, through
// the reference $ref.
var_dump($a); // "fourty-two"
CodePad の参照例。
の通常の動作はforeach
、関連付けられたブロックでコピーを使用できるようにすることです。これは、自由に再割り当てできることを意味し、配列メンバーには影響しません (これは、クラス インスタンスなど、常に参照である変数には当てはまりません)。
CodePadの例をコピーします。
CodePad のクラス インスタンスの例。
a で参照を使用すると、反復処理された最後の値へのforeach
ダングリング参照など、いくつかの副作用があり、$val
後で誤って変更されて配列に影響を与える可能性があります。
CodePad のダングリング参照例。
最初の例には、--> への変更が保存される&
ための参照演算子が含まれています。$val
$val
$array
ただし、これは決して例 2 よりも「優れている」わけではありません。