ホームページ >php教程 >PHP源码 >PHP7新機能foreach変更使用例

PHP7新機能foreach変更使用例

PHP中文网
PHP中文网オリジナル
2016-07-06 13:34:231919ブラウズ

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) をご覧ください。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。