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 サイトの他の関連記事を参照してください。