5

私は上級試験のためにPHPを勉強しています。演習テストでは、最初の反復は 2 番目の反復よりも優れていることが示されました。理由がわかりません。どちらも配列の内容をうまく反復します。

// 最初の1つ:

 foreach($array as $key => &$val) { /* ... */ }

// 二つ目:

foreach($array as $key => $val) { /* ... */ }
4

2 に答える 2

10

演習テストでは、最初の反復は 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 のダングリング参照例。

于 2013-05-15T06:50:02.670 に答える
1

最初の例には、--> への変更が保存される&ための参照演算子が含まれています。$val$val$array

ただし、これは決して例 2 よりも「優れている」わけではありません。

于 2013-05-15T06:51:57.343 に答える