ใน PHP เวอร์ชันก่อนหน้า ฟังก์ชันตัวสร้างไม่สามารถส่งคืนนิพจน์ได้ แต่จาก PHP 5.5 นิพจน์การส่งคืนตัวสร้างจะถูกเพิ่มในฟังก์ชันที่มีอยู่ ด้วยการใช้นิพจน์การส่งคืนของตัวสร้าง มันง่ายที่จะใช้คำสั่ง return ภายในตัวสร้าง และยังส่งกลับค่าของนิพจน์สุดท้ายด้วย
- โดยการใช้ตัวสร้างการส่งคืนนิพจน์ เราสามารถคืนค่าของนิพจน์ แต่ไม่สามารถคืนค่าการอ้างอิงได้ โดยใช้ Generator::getReturn() . ใหม่ เราสามารถดึงค่าที่สามารถใช้ได้เมื่อฟังก์ชันตัวสร้างเสร็จสิ้นการให้ค่าที่กำหนดไว้
- โดยใช้ตัวสร้าง PHP 7 เราสามารถคืนค่าสุดท้ายจากนิพจน์การส่งคืนของตัวสร้าง เราสามารถเรียก return expression โดยใช้ $generator>getReturn() เพราะ PHP 7 ยอมให้ตัวสร้างคืนค่าสุดท้ายจากการนับร่วมในโปรแกรมที่โค้ดไคลเอ็นต์เรียกใช้ตัวสร้างได้
Generator Return Expressions:ตัวอย่างที่ 1
<html> <head> <title> PHP 7 Feature : Generator Return Expressions </title> </head> <body> <?php $generator = (function(){ yield "five"; yield "six"; yield "seven"; return "eight"; }) (); foreach ($generator as $val){ echo $val, PHP_EOL; } echo $generator ->getReturn(), PHP_EOL; ?> </body> </html>
ผลลัพธ์
ผลลัพธ์สำหรับโปรแกรม PHP ด้านบนจะเป็น:
five six seven eight
คำอธิบายสำหรับโปรแกรม PHP 7 ข้างต้น -
- เราสามารถเขียนโค้ดด้านบนในตัวแก้ไข และสามารถเขียนโค้ด HTML ที่จำเป็นตามที่ระบุในตัวอย่างด้านบน และส่วนเนื้อหาของ HTML จะฉีดโค้ด PHP 7 จริงสำหรับการแสดงออกของตัวสร้างการส่งคืน
- ประการที่สอง มีการประกาศฟังก์ชันที่มีการอ้างอิงเป็น $generator
- ในการอ้างอิงถึง $generator เรากำหนดผลตอบแทนเป็น “ห้า”, หก”, เจ็ด” และ “แปด”
- สุดท้ายนี้ เราวนซ้ำในฟังก์ชัน “$generator” จนถึงจุดสิ้นสุด (PHP_EOL) และสะท้อนค่าของผลตอบแทนพร้อมกับนิพจน์การส่งคืนตัวสร้าง
Generator Return Expressions:ตัวอย่างที่ 2
<html> <head> <title> PHP 7 Feature: Generator Return Expressions Example </title> </head> <body> <?php function gen(){ yield 'A'; yield 'B'; yield 'C'; return 'gen-return'; } $generator = gen(); var_dump($generator); foreach ($generator as $letter){ echo $letter; } var_dump($generator->getReturn()); ?> </body> </html>
ผลลัพธ์
ผลลัพธ์สำหรับโปรแกรม PHP ข้างต้นจะเป็น −
object(Generator)#1 (0) { }ABCstring(10) "gen-return"