Computer >> Máy Tính >  >> Lập trình >> PHP

Các đối tượng Trình tạo PHP và Đối tượng lặp lại

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