PHP8.1 memperkenalkan penambahbaikan kepada Penjana
Penjana ialah ciri berkuasa yang diperkenalkan dalam PHP 5.5, yang menyediakan cara yang lebih cekap untuk melaksanakan iterator. Dalam versi PHP 8.1, Penjana telah menjalani beberapa penambahbaikan penting, membawa lebih banyak kemudahan dan fleksibiliti kepada pembangun. Dalam artikel ini, kami meneroka penambahbaikan ini dan menggambarkan penggunaannya dengan contoh kod.
1. Kembalikan nama kunci dan nilai kunci
Dalam versi sebelum PHP 8.1, Penjana hanya boleh mengembalikan nilai kunci atau hanya nama kunci. Ini mungkin tidak cukup fleksibel dalam sesetengah senario aplikasi, dan kaedah lain perlu digunakan untuk mencapai keperluan untuk mengembalikan nama kunci dan nilai kunci pada masa yang sama. Dalam PHP 8.1, kita boleh menggunakan hasil baharu sebagai sintaks untuk mendapatkan kedua-dua nama kunci dan nilai kunci. Berikut ialah contoh:
function myGenerator() { yield 'a' => 1; yield 'b' => 2; yield 'c' => 3; } $generator = myGenerator(); foreach ($generator as $key => $value) { echo "$key => $value" . PHP_EOL; }
Jalankan kod di atas, anda akan mendapat output berikut:
a => 1 b => 2 c => 3
Melalui hasil sebagai sintaks, kita boleh mendapatkan nama kunci dan nilai kunci pada masa yang sama apabila melintasi iterator, yang sangat bertambah baik kesederhanaan dan kebolehbacaan kod.
2. Pemanasan penjana
Dalam versi sebelum PHP 8.1, apabila kami mencipta objek Penjana, ia akan memulakan pelaksanaan serta-merta dan tidak boleh dijeda. Dalam sesetengah kes, kami ingin melakukan beberapa operasi memanaskan badan sebelum benar-benar mula menggunakan objek Generator.
Dalam PHP 8.1, kaedah baharu bernama send() telah ditambahkan untuk memulakan objek Generator dan menjeda pelaksanaannya. Kita boleh melakukan kerja permulaan yang diperlukan sebelum objek penjana dimulakan, dan kemudian gunakan kaedah send() untuk menyambung semula pelaksanaan penjana apabila diperlukan. Berikut ialah contoh:
function myGenerator() { $data = yield; // 等待 send() 方法的传值 yield $data; } $generator = myGenerator(); $generator->send(123); foreach ($generator as $value) { echo $value . PHP_EOL; }
Jalankan kod di atas, anda akan mendapat output berikut:
123
Dengan menggunakan kaedah send(), lulus parameter sebelum objek penjana dimulakan, kita boleh membuat perubahan yang diperlukan semasa pelaksanaan operasi penjana untuk meningkatkan fleksibiliti dan skalabiliti kod.
3. Padanan longgar jenis parameter
Sebelum PHP 8.1, jika jenis nama kunci dan nilai kunci penjana tidak betul-betul sepadan dengan jenis pembolehubah gelung foreach, ralat jenis yang ketat akan berlaku. Dalam PHP 8.1, pemadanan santai jenis parameter telah diperkenalkan, dan ralat tidak akan dilemparkan lagi apabila jenis boleh dihantar.
Berikut ialah contoh:
function myGenerator() { yield 1 => 'a'; yield 2 => 'b'; yield 3 => 'c'; } $generator = myGenerator(); foreach ($generator as $index => $letter) { echo $index . ' => ' . $letter . PHP_EOL; }
Jalankan kod di atas, anda akan mendapat output berikut:
1 => a 2 => b 3 => c
Seperti yang anda lihat, nama kunci penjana ialah integer, tetapi jenis pembolehubah gelung foreach ialah rentetan. Dalam PHP 8.1, keadaan ini tidak lagi melaporkan ralat, tetapi akan melakukan penukaran jenis dan mengeluarkan hasil seperti biasa.
Ringkasan:
Peningkatan kepada Penjana yang diperkenalkan dalam PHP 8.1 menyediakan pembangun dengan lebih fleksibiliti dan kemudahan. Kita boleh menggunakan hasil sebagai sintaks untuk mendapatkan kedua-dua nama kunci dan nilai kunci, melaksanakan operasi prapemanasan penjana melalui kaedah send() dan secara longgar memadankan jenis parameter apabila jenis tidak sepadan dengan tepat. Penambahbaikan ini menjadikan Penjana lebih berkuasa dan lebih mudah digunakan dalam aplikasi praktikal.
Di atas adalah penambahbaikan dan kod contoh Penjana yang diperkenalkan dalam PHP 8.1. Saya harap artikel ini membantu anda memahami dan menggunakan Penjana.
Atas ialah kandungan terperinci PHP8.1 memperkenalkan penambahbaikan kepada Penjana. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!