ホームページ  >  記事  >  バックエンド開発  >  PHP8.1 ではジェネレーターが改良されています

PHP8.1 ではジェネレーターが改良されています

WBOY
WBOYオリジナル
2023-07-07 22:57:051100ブラウズ

PHP8.1 では、ジェネレーターが改善されました。

ジェネレーターは、PHP 5.5 で導入された強力な機能であり、イテレーターをより効率的に実装する方法を提供します。 PHP 8.1 バージョンでは、ジェネレーターにいくつかの重要な改良が加えられ、開発者にさらなる利便性と柔軟性をもたらします。この記事では、これらの改善点を検討し、コード例を使用してその使用法を説明します。

1. キー名とキー値を返す

PHP 8.1 より前のバージョンでは、ジェネレーターはキー値またはキー名のみを返すことができました。これは一部のアプリケーション シナリオでは十分な柔軟性がない場合があり、キー名とキー値を同時に返す必要がある場合は、他のメソッドを使用する必要があります。 PHP 8.1 では、新しい yield を構文として使用して、キー名とキー値の両方を取得できます。以下は例です:

function myGenerator()
{
    yield 'a' => 1;
    yield 'b' => 2;
    yield 'c' => 3;
}

$generator = myGenerator();

foreach ($generator as $key => $value) {
    echo "$key => $value" . PHP_EOL;
}

上記のコードを実行すると、次の出力が得られます:

a => 1
b => 2
c => 3

yield as 構文を通じて、キー名とキー値を同時に取得できます。イテレータを走査する際の時間の短縮により、コードの単純さと読みやすさが大幅に向上しました。

2. ジェネレーターのウォームアップ

PHP 8.1 より前のバージョンでは、ジェネレーター オブジェクトを作成するとすぐに実行が開始され、一時停止することはできません。場合によっては、Generator オブジェクトを実際に使用し始める前に、いくつかのウォームアップ操作を実行する必要があります。

PHP 8.1 では、Generator オブジェクトを開始し、その実行を一時停止するための send() という名前の新しいメソッドが追加されました。ジェネレーター オブジェクトが開始される前に必要な初期化作業を実行し、必要に応じて send() メソッドを使用してジェネレーターの実行を再開できます。以下に例を示します。

function myGenerator()
{
    $data = yield; // 等待 send() 方法的传值
    yield $data;
}

$generator = myGenerator();

$generator->send(123);

foreach ($generator as $value) {
    echo $value . PHP_EOL;
}

上記のコードを実行すると、次の出力が得られます。

123

send() メソッドを使用し、ジェネレーター オブジェクトが開始される前にパラメーターを渡すことにより、次のことが可能になります。生成 コードの柔軟性とスケーラビリティを向上させるために、プロセッサの実行中に必要な操作を実行します。

3. パラメーターの型の緩い一致

PHP 8.1 より前では、ジェネレーターのキー名とキー値の型が foreach ループ変数の型と正確に一致しない場合、厳密な型エラーが発生します。が発生します。 PHP 8.1 では、パラメーターの型の緩和されたマッチングが導入され、型をキャストできる場合にエラーがスローされなくなりました。

次は例です:

function myGenerator()
{
    yield 1 => 'a';
    yield 2 => 'b';
    yield 3 => 'c';
}

$generator = myGenerator();

foreach ($generator as $index => $letter) {
    echo $index . ' => ' . $letter . PHP_EOL;
}

上記のコードを実行すると、次の出力が得られます:

1 => a
2 => b
3 => c

ご覧のとおり、ジェネレーターのキー名は次のとおりです。整数ですが、foreach ループ変数の型は文字列です。 PHP 8.1 では、この状況はエラーを報告しなくなり、型変換が実行され、結果が正常に出力されます。

概要:

PHP 8.1 で導入されたジェネレーターの改良により、開発者はより高い柔軟性と利便性を得ることができます。構文として yield を使用すると、キー名とキー値の両方を取得し、send() メソッドを通じてジェネレーターの予熱操作を実装し、型が正確に一致しない場合にパラメーターの型を大まかに一致させることができます。これらの改善により、ジェネレーターはより強力になり、実際のアプリケーションでの使用が容易になります。

上記は、PHP 8.1 で導入されたジェネレーターの改良とサンプルコードです。この記事がジェネレーターの理解と使用に役立つことを願っています。

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

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