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

Lớp trình tạo PHP

Giới thiệu

Duyệt qua một tập hợp lớn dữ liệu bằng cách sử dụng cấu trúc lặp như foreach sẽ yêu cầu bộ nhớ lớn và thời gian xử lý đáng kể. Với máy phát điện có thể lặp lại một tập dữ liệu mà không có các chi phí này. Một chức năng máy phát điện tương tự như một chức năng bình thường. Tuy nhiên, thay vì câu lệnh trả về trong một hàm, trình tạo sử dụng năng suất từ khóa được thực thi lặp đi lặp lại để nó cung cấp các giá trị được lặp lại.

Từ khóa năng suất là trung tâm của cơ chế máy phát điện. Mặc dù việc sử dụng nó có vẻ tương tự như return, nhưng nó không ngừng thực thi chức năng. Nó cung cấp giá trị tiếp theo để lặp lại và tạm dừng thực thi chức năng.

Cú pháp

Generator implements Iterator {
   /* Methods */
   public current ( void ) : mixed
   public getReturn ( void ) : mixed
   public key ( void ) : mixed
   public next ( void ) : void
   public rewind ( void ) : void
   public send ( mixed $value ) : mixed
   public throw ( Throwable $exception ) : mixed
   public valid ( void ) : bool
   public __wakeup ( void ) : void
}

Phương pháp

Trình tạo công cộng ::hiện tại (vô hiệu) - hỗn hợp - Nhận giá trị thu được

public Generator ::getReturn (void):mix - Nhận giá trị trả về của trình tạo

public Generator ::key (void) - hỗn hợp - Nhận khóa của giá trị sinh ra.

public Generator ::next (void) - void - Tiếp tục thực hiện máy phát điện. hiệu ứng tương tự như gọi Generator ::send () với NULL làm đối số.

public Generator ::rewind (void) - void - Tua lại trình lặp. Nếu quá trình lặp lại đã bắt đầu, điều này sẽ tạo ra một ngoại lệ.

public Generator ::send (giá trị $ hỗn hợp):hỗn hợp - Gửi giá trị đã cho đến trình tạo do biểu thức năng suất hiện tại và tiếp tục trình tạo.

Trình tạo công cộng ::ném (Ngoại lệ $ có thể ném) - hỗn hợp - Đưa một ngoại lệ vào trình tạo và tiếp tục thực thi trình tạo.

public Generator ::valid (void) - bool - Kiểm tra xem trình lặp đã được đóng lại chưa

public Generator ::__ wakeup (void) - void - Đưa ra một ngoại lệ vì trình tạo không thể được tuần tự hóa.

Lớp Generator triển khai giao diện Iterator. Các đối tượng của trình tạo không thể được khởi tạo thông qua mới. Bất kỳ hàm nào do người dùng xác định có từ khóa lợi nhuận sẽ tạo đối tượng của lớp trình tạo.

Ví dụ về trình tạo

Vì trình tạo triển khai giao diện Iterator, nên mỗi vòng lặp có thể được sử dụng để duyệt qua các giá trị mang lại.

<?php
function squaregenerator(){
   for ($i=1; $i<=5; $i++){
      yield $i*$i;
   }
}
$gen=squaregenerator();
foreach ($gen as $val){
   echo $val . " ";
}
?>

Đầu ra

Chương trình trên hiển thị kết quả sau

1 4 9 16 25

ví dụ sau sử dụng các phương thức current () và next () của lớp trình tạo để truyền các giá trị mang lại. Điều kiện vòng lặp được kiểm tra bằng phương thức valid ().

Ví dụ

<?php
function squaregenerator(){
   for ($i=1; $i<=5; $i++){
      yield $i*$i;
   }
}
$gen=squaregenerator();
while ( $gen->valid() ){
   echo "key: " . $gen->key(). " value: ". $gen->current() . "\n";
   $gen->next();
}
?>

Đầu ra

Chương trình trên hiển thị kết quả sau

key: 0 value: 1
key: 1 value: 4
key: 2 value: 9
key: 3 value: 16
key: 4 value: 25