Hướng dẫn dùng nodejs yield trong PHP

Yield là gì?

Yield là một hàm Generator giống như một hàm bình thường, ngoại trừ việc thay vì trả về một giá trị, Generator sẽ mang lại nhiều giá trị như nó cần. Nhìn vào ví dụ sau để dễ hiểu nhé:

function getValues[] {
    yield 'value';
}
// print the string "value"
echo getValues[];

Tất nhiên, đây không phải là cách nó hoạt động, ví dụ trước sẽ cho bạn một lỗi nghiêm trọng: Không thể chuyển đổi đối tượng của lớp Trình tạo thành chuỗi, chúng ta hãy làm rõ hơn bên dưới đây.

Khác nhau giữa yield và return

Lỗi trước có nghĩa là hàm getValues ​​[] không trả về một chuỗi như mong đợi, chúng ta hãy kiểm tra kiểu của nó:

function getValues[] {
    return 'value';
}
var_dump[getValues[]]; // string[5] "value" đây là 1 string được trả về kiểu chuổi.

function getValues[] {
    yield 'value';
}
var_dump[getValues[]]; // class Generator#1 [0] {} đây là 1 Object Generator được trả về từ 1 Class Generator.

Lớp Generator  triển khai giao diện Iterator, có nghĩa là bạn phải lặp qua hàm getValue [] để có được các giá trị:

foreach [getValues[] as $value] {
   echo $value;
}
// using variable is also alright
$values = getValues[];
foreach [$values as $value] {
   echo $value;
}

Nhưng đây không phải là sự khác biệt duy nhất!

Generator cho phép bạn viết mã sử dụng foreach để lặp lại một tập hợp dữ liệu mà không cần xây dựng một mảng trong bộ nhớ, điều này có thể khiến bạn vượt quá giới hạn bộ nhớ. Quá tốt nếu bạn đang cần sử dụng loop lồng nhau rồi.

Trong ví dụ sau, chúng tôi sẽ xây dựng một mảng gồm 800.000 phần tử và trả về nó từ hàm getValues[] , và trong khi đó, chúng ta sẽ lấy bộ nhớ được phân bổ cho tập lệnh này bằng cách sử dụng hàm memory_get_usage[] , chúng ta sẽ sử dụng bộ nhớ sau mỗi 200.000 phần tử được thêm vào, có nghĩa là chúng ta sẽ đặt bốn điểm kiểm tra.

Chủ Đề