Trình tạo trong PHP là gì

Trưa nay, khi đang đọc, tôi chợt biết rằng PHP cũng có các trình tạo như Python. tôi đã rất ngạc nhiên. Gì? . 😲

Chà, sau đó tôi bắt đầu đọc về máy phát điện và đây là những gì tôi biết về nó

máy phát điện

Trình tạo giống như các hàm nhưng điểm khác biệt chính giữa chúng là hàm trả về giá trị (hoặc có thể không) nhưng trình tạo mang lại giá trị. Có, trình tạo cũng có thể trả về giá trị. Chúng ta sẽ đi sâu vào vấn đề đó sau. Hàm chứa từ khóa *yield* là một trình tạo. Đó là nó

Khi bạn cố ý hoặc vô ý sử dụng từ khóa yield trong một hàm, hàm đó sẽ trở thành một trình tạo. Không thể vô tình, vì bạn có thể không biết từ. Bạn sẽ sử dụng như thế nào?

Chúng ta hãy xem mã…

function g1 () {
yield 1;
yield 2;
yield 3;
}

Đoạn mã trên là một trình tạo. Khi bạn lặp lại hàm, mỗi lần bạn sẽ nhận được một giá trị cho đến khi kết thúc

$gen = g1();foreach($gen as $value) {
echo $value . PHP_EOL;
}

Trong khi lặp lại trình tạo, bạn cũng sẽ nhận được một khóa cho các giá trị đó. Vì vậy, lần lặp trước có thể được viết lại như sau

$gen = g1();foreach($gen as $key => $value) {
echo $key . ' => ' . $value . PHP_EOL;
}

Trình tạo cũng có thể được sử dụng như một mảng kết hợp. Bạn chỉ có thể làm như sau để đạt được như vậy,

function g2 () {
yield 'a' => 1;
yield 'b' => 2;
yield 'c' => 3;
}
$gen = g2();foreach($gen as $key => $value) {
echo $key . ' => ' . $value . PHP_EOL;
}

Nếu bạn đang sử dụng PHP5 và bạn muốn sử dụng kết quả như một biểu thức và sử dụng biến đó sau đó, bạn nên đặt câu lệnh kết quả trong dấu ngoặc đơn. Thích

$gen = g1();foreach($gen as $value) {
echo $value . PHP_EOL;
}
9. Trong PHP7+ sẽ tốt nếu bạn không sử dụng dấu ngoặc đơn

Bạn cũng có thể tạo ra NULL từ trình tạo bằng

$gen = g1();foreach($gen as $value) {
echo $value . PHP_EOL;
}
0 hoặc
$gen = g1();foreach($gen as $value) {
echo $value . PHP_EOL;
}
1

function gnull () {
yield null;
yield;
}
$gen = gnull();foreach($gen as $key => $value) {
echo $key . ' => ' . $value . PHP_EOL;
}

Ủy quyền máy phát điện

Bạn chỉ có thể ủy quyền các giá trị của trình tạo chỉ trong PHP7+. Cái nào có thể được ủy quyền từ một trình tạo khác, đối tượng có thể duyệt hoặc một mảng. Để đạt được như vậy, bạn có thể làm như dưới đây

function gDelegate () {
yield from g2();
yield from [3, 4];
yield from new ArrayIterator([5, 6]);
yield 'd' => 4;
yield 'e' => 5;
yield 'f' => 6;
}
$gen = gDelegate();
foreach($gen as $key => $value) {
echo $key . ' => ' . $value . PHP_EOL;
}

Giá trị trả về

Chỉ trong PHP7+, bạn mới được phép trả về giá trị từ trình tạo. Làm như vậy trong phiên bản trước sẽ gây ra lỗi

Trong PHP 5, trình tạo không thể trả về giá trị. làm như vậy sẽ dẫn đến lỗi biên dịch. — php. net

Để lấy giá trị trả về từ trình tạo, chúng tôi sẽ sử dụng phương thức

$gen = g1();foreach($gen as $value) {
echo $value . PHP_EOL;
}
2

function greturn () {
yield 'a' => 1;
yield 'b' => 2;
return 'greturn';
}
$gen = greturn();
foreach($gen as $key => $value) {
echo $key . ' => ' . $value . PHP_EOL;
}
var_dump($gen->getReturn());

Phương thức

$gen = g1();foreach($gen as $value) {
echo $value . PHP_EOL;
}
3 trên trình tạo sẽ trả về giá trị được trả về từ trình tạo

Chuyển đổi thành một mảng

Trình tạo là một mục có thể lặp lại. Để chuyển đổi một trình tạo thành một mảng, chúng ta sẽ sử dụng phương thức

$gen = g1();foreach($gen as $value) {
echo $value . PHP_EOL;
}
4

$gen = g1();foreach($gen as $value) {
echo $value . PHP_EOL;
}
2

Nhưng vấn đề với điều này là mỗi trình tạo tạo một khóa cho các giá trị của nó. Nếu khóa không được chỉ định, nó sẽ bắt đầu từ

$gen = g1();foreach($gen as $value) {
echo $value . PHP_EOL;
}
5. Bây giờ trong khi chuyển đổi thành một mảng, nếu bạn muốn ủy quyền các giá trị từ các đối tượng có thể lặp lại khác, các khóa sẽ bị ghi đè nếu có cùng một khóa cho nhiều giá trị. Kiểm tra mã sau…

$gen = g1();foreach($gen as $value) {
echo $value . PHP_EOL;
}
4

iterate_to_array output

đầu ra iterate_to_array

Như bạn có thể thấy ở trên, giá trị của khóa

$gen = g1();foreach($gen as $value) {
echo $value . PHP_EOL;
}
6 đã bị ghi đè tại đây. Nếu bạn đang sử dụng khóa dựa trên
$gen = g1();foreach($gen as $value) {
echo $value . PHP_EOL;
}
7 và chỉ mục không quan trọng với bạn thì bạn có thể chuyển tham số thứ hai
$gen = g1();foreach($gen as $value) {
echo $value . PHP_EOL;
}
8 cho
$gen = g1();foreach($gen as $value) {
echo $value . PHP_EOL;
}
4, tham số này sẽ lập chỉ mục lại mảng và giữ tất cả các giá trị. Làm như vậy để các trình tạo Giá trị khóa sẽ lập chỉ mục lại bằng các khóa số nguyên

Trình tạo là gì và cách sử dụng trong PHP?

Trình tạo 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 tạo một mảng trong bộ nhớ , mà .

Chức năng tạo là gì?

Trình tạo là hàm tạo ra một chuỗi kết quả thay vì một giá trị duy nhất , i. e bạn tạo ra một loạt các giá trị.

Làm cách nào để tạo mã PHP?

Tạo cơ sở dữ liệu
Chỉnh sửa các trường trong cơ sở dữ liệu
Sao chép, đổi tên và thả bảng
Tạo và loại bỏ các thủ tục và chức năng
Chạy truy vấn và tham gia các bảng dựa trên kết quả truy vấn
Tạo mã HTML, CSS và MySQL cũng như các biến PHP

Khi nào nên sử dụng hàm tạo?

Trình tạo thật tuyệt vời khi bạn gặp sự cố yêu cầu bạn phải đọc từ tập dữ liệu lớn . Việc đọc từ một tập dữ liệu lớn một cách gián tiếp có nghĩa là máy tính hoặc máy chủ của chúng tôi sẽ phải phân bổ bộ nhớ cho nó. Điều kiện duy nhất cần nhớ là Trình tạo chỉ có thể được lặp lại một lần.