PHP7 の新機能 foreach は以前のバージョンから少し変更されました。それでは、PHP7 の新機能 foreach の使用例を見てみましょう。この記事が皆さんのお役に立てれば幸いです。
<script>ec(2);</script>
1. foreach() ループは配列の内部ポインターに対して機能しなくなりました。PHP7 より前では、配列が foreach を介して反復されると、配列ポインターが移動していました。今後、これは当てはまらなくなります。以下のコードを参照してください。 。
$array = [0, 1, 2]; foreach ($array as &$val) { var_dump(current($array)); }
PHP5 の操作の結果は int(1) int(2) bool(false) を出力します
PHP7 の操作の結果は int(0) を 3 回出力します。これは、配列の内部ポインターが変更されていないことを意味します。
前回の実行の結果は、int(1)、int(2)、および bool(false) を出力します
2. 値に従ってループする場合、foreach は配列のコピー操作です
foreach が次に従ってループする場合value (値渡し)、foreach は配列のコピーに対して動作します。このようにして、ループ中に配列を変更しても、ループの動作には影響しません。
$array = [0, 1, 2]; $ref =& $array; // Necessary to trigger the old behavior foreach ($array as $val) { var_dump($val); unset($array[1]); }
上記のコードはループ内の配列の 2 番目の要素の設定を解除しますが、PHP7 は依然として 3 つの要素 (0 1 2) を出力します。
以前のバージョンの PHP では、1 をスキップして (0 2) のみを出力します。
3. 参照に従ってループする場合、配列への変更はループに影響します。
ループ時に参照を使用する場合、配列への変更はループの動作に影響します。ただし、PHP7 バージョンでは、多くのシナリオで場所のメンテナンスが最適化されます。たとえば、ループ中に要素を配列に追加します。
$array = [0]; foreach ($array as &$val) { var_dump($val); $array[1] = 1; }
上記のコードに追加された要素もループに参加するため、PHP7 では "int(0) int(1)" が出力されますが、古いバージョンでは "int(0)" のみが出力されます。
4. 単純なオブジェクトをループします (走査不可能)。
単純なオブジェクトのループは、値によるループでも参照によるループでも、配列内の参照によるループと同じように動作します。ただし、位置管理はより正確になります。
5. Traversable オブジェクトの動作は以前と同じです。
編集者注: 上記の Stackoverflow の説明: Traversable オブジェクトは、Iterator または IteratorAggregate インターフェイスを実装するオブジェクトです。オブジェクトが iterator または IteratorAggregate インターフェイスを実装している場合、それを iterator オブジェクトと呼ぶことができます。
上記は PHP7 の新機能 foreach の使用例の内容です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) をご覧ください。