Giới thiệu
Khi một hàm của trình tạo được gọi, trong nội bộ, một đối tượng mới của lớp Generator sẽ được trả về. Nó triển khai Trình lặp lại giao diện. Giao diện trình lặp xác định các phương thức trừu tượng sau
- Trình lặp lại ::hiện tại - Trả lại phần tử hiện tại
- Trình lặp lại ::key - Trả lại khóa của phần tử hiện tại
- Trình lặp lại ::tiếp theo - Chuyển tiếp đến phần tử tiếp theo
- Trình lặp lại ::tua lại - Tua lại Trình lặp lại thành phần tử đầu tiên
- Trình lặp lại ::hợp lệ - Kiểm tra xem vị trí hiện tại có hợp lệ không
Trình tạo hoạt động như một trình lặp chỉ chuyển tiếp đối tượng sẽ và cung cấp các phương thức có thể được gọi để thao tác trạng thái của trình tạo, bao gồm cả việc gửi giá trị đến và trả về giá trị từ nó.
Trình tạo dưới dạng trình tổng hợp
Trong ví dụ sau, các hàm của trình tạo tạo ra các dòng trong một tệp trong một đối tượng của trình tạo có thể được duyệt qua bằng cách sử dụng vòng lặp oreach. Các phương thức của trình lặp lại chẳng hạn như hiện tại () và tiếp theo () cũng có thể được gọi. Tuy nhiên, vì trình tạo là trình lặp chỉ chuyển tiếp nên việc gọi tua lại () phương thức ném ngoại lệ
Ví dụ
<?php function filegenerator($name) { $fileHandle = fopen($name, 'r'); while ($line = fgets($fileHandle)) { yield $line; } fclose($fileHandle); } $name="test.txt"; $file=filegenerator($name); foreach ($file as $line) echo $line; $file->rewind(); echo $file->current(); $file->next(); echo $file->current(); ?>
Đầu ra
Sau khi duyệt qua các dòng tệp, lỗi nghiêm trọng như hình dưới đây được hiển thị
PHP User Defined Functions PHP Function Arguments PHP Variable Functions PHP Internal (Built-in) Functions PHP Anonymous functions PHP Arrow Functions PHP Fatal error: Uncaught Exception: Cannot rewind a generator that was already run