目次
イテレーションとイテレータ
収量とジェネレーター
概念の理解
ホームページ バックエンド開発 PHPチュートリアル PHP イテレータ ジェネレータの概要

PHP イテレータ ジェネレータの概要

Jul 05, 2018 pm 03:08 PM

この記事では主に PHP イテレータ ジェネレータの紹介を紹介しますが、これは参考になると思います。今回はそれを共有します。必要な友人は参考にしてください。

イテレーションとイテレータ

イテレーションプロセスを繰り返し実行することを指し、各実行はイテレーションと呼ばれます。たとえば、通常の走査は反復です。

$arr = [1, 2, 3, 4, 5];foreach($arr as $key => $value) {    echo $key . ' => ' . $value . "\n";}
ログイン後にコピー

foreach が配列を走査し、その内容を繰り返し出力していることがわかります。 foreach 内で、各反復は現在の要素の値を $value に割り当て、配列ポインターを次の要素に移動して次の反復に備えます。これにより、シーケンスのトラバースが実現されます。外部関数が自身の内部データを反復できるようにするインターフェイスは Iterator インターフェイス であり、対応する反復された自己は Iterator オブジェクト です。

PHP は、統一されたイテレータ インターフェイスを提供します。

Iterator extends Traversable {    // 返回当前的元素
    abstract public mixed current(void)
    // 返回当前元素的键
    abstract public scalar key(void)
    // 向下移动到下一个元素
    abstract public void next(void)
    // 返回到迭代器的第一个元素
    abstract public void rewind(void)
    // 检查当前位置是否有效
    abstract public boolean valid(void)}
ログイン後にコピー

Iterator インターフェイス を実装することにより、オブジェクトをトラバースする方法を自分で決定できます。

Foreach が機能するのは、これらのコレクション クラスがすべて Iterator の生成メソッドを定義する Iterable インターフェイスを実装しており、foreach が Iterable インターフェイスを通じてシーケンス内を移動するためです。

収量とジェネレーター

イテレーターと比較して、ジェネレーターは、パフォーマンスのオーバーヘッドと複雑さが少なく、単純な オブジェクト反復を実装する簡単な方法を提供します。

ジェネレーター関数は通常の関数のように見えます。違いは、通常の関数が値を返すのに対し、ジェネレーターは yield多くの値を生成でき、それぞれの生成は一時停止するだけであることです。この状態にある場合、次回ジェネレーター関数が呼び出されたときに、PHP は最後に一時停止された状態から実行を継続します。

ジェネレーターを使用すると、生成された値に対応するキー名を連想配列のように指定できます。次のようにキーと値のペアを生成することは、連想配列を定義することと似ています。

function xrange($start, $limit, $step = 1) {    
for ($i = $start, $j = 0; $i <= $limit; $i += $step, $j++) {        // 给予键值
        yield $j => $i;
    }
}$xrange = xrange(1, 10, 2);foreach ($xrange as $key => $value) {    
echo $key . &#39; => &#39; . $value . "\n";}
ログイン後にコピー

概念の理解

最初に概念を明確にします: ジェネレーターの yield キーワードは戻り値ではなく、専門用語では出力値と呼ばれ、値を生成するだけです。実際、ジェネレーター関数は Generator オブジェクトを返しますが、これは new を通じてインスタンス化できず、Iterator インターフェイスを実装します。

では、コード foreach のループは何でしょうか? PHP がジェネレーターを使用すると、クラス Generator のオブジェクトが返されます。 foreach オブジェクトは反復可能です。反復ごとに、PHP は Generator インスタンスを通じて次に反復する必要がある値を計算します。このようにして、foreach は次に反復する必要がある値を知ることができます。

また、動作中は、for はループ実行直後に停止します。次のループ中に foreachfor に次の値を再度要求するまで待機し、ループが再度実行されます。そしてすぐに再び停止します。条件が満たされない限り実行されません。

#ジェネレーターの利点

  • ジェネレーターは、PHP アプリケーションのパフォーマンスに大きな影響を与えます

  • PHP コードは実行時に多くのメモリを節約します

  • 大量のデータの計算に適しています

実際の開発アプリケーション: 非常に大きなファイルの読み取り

PHP 開発では、csv ファイル、テキスト ファイル、一部のログ ファイルなどの大きなファイルの読み取りが必要になることがよくあります。これらのファイルが 5G など大きい場合。現時点では、すべての内容を一度にメモリに直接読み取ることは現実的ではありません。ジェネレーターを使用してファイルを読み取ります。最初の行は初めて読み取られ、2 行目は 2 回目に読み取られます。

毎回メモリにロードされるテキストは 1 行だけです、メモリ使用量が大幅に削減されます。

<?php
header("content-type:text/html;charset=utf-8");
function readTxt()
{
    # code...
    $handle = fopen("./test.txt", &#39;rb&#39;);

    while (feof($handle)===false) {
        # code...
        yield fgets($handle);
    }

    fclose($handle);
}

foreach (readTxt() as $key => $value) {
    # code...
    echo $value.&#39;<br />&#39;;
}
ログイン後にコピー
以上がこの記事の全内容です。皆様の学習にお役に立てれば幸いです。その他の関連コンテンツについては、PHP 中国語 Web サイトをご覧ください。

関連する推奨事項:

PHP は Azure Storage Blob を使用してファイルをアップロードします

PHP で他のインターフェイスをリクエストする Curl の概要インターフェース# ########

以上がPHP イテレータ ジェネレータの概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHPのカール:REST APIでPHPカール拡張機能を使用する方法 PHPのカール:REST APIでPHPカール拡張機能を使用する方法 Mar 14, 2025 am 11:42 AM

PHPクライアントURL(CURL)拡張機能は、開発者にとって強力なツールであり、リモートサーバーやREST APIとのシームレスな対話を可能にします。尊敬されるマルチプロトコルファイル転送ライブラリであるLibcurlを活用することにより、PHP Curlは効率的なexecuを促進します

Codecanyonで12の最高のPHPチャットスクリプト Codecanyonで12の最高のPHPチャットスクリプト Mar 13, 2025 pm 12:08 PM

顧客の最も差し迫った問題にリアルタイムでインスタントソリューションを提供したいですか? ライブチャットを使用すると、顧客とのリアルタイムな会話を行い、すぐに問題を解決できます。それはあなたがあなたのカスタムにより速いサービスを提供することを可能にします

PHPにおける後期静的結合の概念を説明します。 PHPにおける後期静的結合の概念を説明します。 Mar 21, 2025 pm 01:33 PM

記事では、PHP 5.3で導入されたPHPの後期静的結合(LSB)について説明し、より柔軟な継承を求める静的メソッドコールのランタイム解像度を可能にします。 LSBの実用的なアプリケーションと潜在的なパフォーマ

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

フレームワークセキュリティ機能:脆弱性から保護します。 フレームワークセキュリティ機能:脆弱性から保護します。 Mar 28, 2025 pm 05:11 PM

記事では、入力検証、認証、定期的な更新など、脆弱性から保護するためのフレームワークの重要なセキュリティ機能について説明します。

フレームワークのカスタマイズ/拡張:カスタム機能を追加する方法。 フレームワークのカスタマイズ/拡張:カスタム機能を追加する方法。 Mar 28, 2025 pm 05:12 PM

この記事では、フレームワークにカスタム機能を追加し、アーキテクチャの理解、拡張ポイントの識別、統合とデバッグのベストプラクティスに焦点を当てています。

PHPのCurlライブラリを使用してJSONデータを含むPOSTリクエストを送信する方法は? PHPのCurlライブラリを使用してJSONデータを含むPOSTリクエストを送信する方法は? Apr 01, 2025 pm 03:12 PM

PHP開発でPHPのCurlライブラリを使用してJSONデータを送信すると、外部APIと対話する必要があることがよくあります。一般的な方法の1つは、Curlライブラリを使用して投稿を送信することです。

See all articles