Câu hỏi đơn giản.Máy phát điện PHP - Bộ sưu tập rác
Khi nào hoặc bằng cách nào, bằng PHP hoặc chính bạn làm máy phát điện phá hủy ngăn xếp của chúng?
Lấy ví dụ sau đây:
function doWork(): Generator
{
// create some objects.
$o1 = new stdClass();
$o2 = new stdClass();
// pause here and wait for data.
$value = yield 1;
// By referencing the above objects, they shouldn't destruct.
$o1->property = $value;
$o2->property = $value;
yield $o1;
yield $o2;
// End of stack.
}
// Create the generator.
$generator = doWork();
$value = $generator->current(); // $value will equal 1.
if ($x) {
$generator->send('Hello, World!'); // Continue execution of the generator.
$o1 = $generator->current();
$generator->next();
$o2 = $generator->current();
$generator->next(); // Complete the generator
var_dump($o1);
var_dump($o2);
} else {
// Do nothing with the generator.
}
// Carry on with script ...
Trong ví dụ này một máy phát điện được bắt đầu và hai đối tượng được tạo ra. Tại thời điểm này nó được mang lại, và dữ liệu thêm được yêu cầu.
Đã đạt được tuyên bố IF.
Trường hợp 1
Nếu $x
là đúng, giá trị "Hello, World!"
sẽ được gửi đến các máy phát điện và các đối tượng sẽ được áp dụng với những đặc tính mới của họ.
Lần sau khi dữ liệu được cung cấp được đọc, các đối tượng sẽ được trả về.
Trường hợp 2
Nếu $x
là sai, các máy phát điện sẽ không còn được sử dụng.
Câu hỏi
Trong trường hợp 1, tôi mong chờ chồng để đóng giống như bất kỳ chức năng khác, nhưng những gì xảy ra đối với các máy phát điện trong trường hợp 2? Liệu nó và tất cả các tham chiếu đối tượng còn lại vẫn còn trong bộ nhớ cho đến khi kịch bản kết thúc?
Hoặc mất tham chiếu đến $generator
làm điều đó và tất cả các tham chiếu bên trong sẽ bị xóa?
Không có vấn đề gì, hãy cổ vũ bạn đời – Flosculus