ใน 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"