2014-04-04 15 views
7

Trong tài liệu PHP nó nói rằng:Máy phát điện PHP có thể được nhân bản không?

Sự linh hoạt này không đi kèm với chi phí, tuy nhiên: máy phát điện là phía trước chỉ lặp, và không thể được rewound lần lặp đã bắt đầu. Điều này cũng có nghĩa là cùng một máy phát không thể lặp lại nhiều lần: máy phát sẽ cần phải được xây dựng lại bằng cách gọi lại chức năng máy phát, hoặc nhân bản qua từ khóa clone. Documentation

Tuy nhiên tôi cố gắng viết một mã mà bắt chước các đối tượng phát mà tôi nhận được từ một phương pháp và tôi đã nhận một lỗi xác định rằng một đối tượng phát không thể được nhân bản:

class Course { 
    private $students = array("avi" , "haim" , "maor" , "liran" , "yossi"); 

    function generateStudents() { 
     foreach ($this->students as $student) { 
      yield $student; 
     } 
    } 
} 

$ob = new Course(); 
$generator = $ob->generateStudents(); 

// Fatal error: Trying to clone an uncloneable object of class Generator 
$generator2 = clone $generator; 

?> 
+2

Vui lòng đặt câu hỏi của bạn rõ ràng hơn. –

Trả lời

4

According to the RFC, máy phát điện không thể sao chép được:

Máy phát không thể nhân bản.

Hỗ trợ sao chép được bao gồm trong phiên bản đầu tiên, nhưng bị loại bỏ trong PHP 5.5 Beta 3 do khó khăn triển khai, ngữ nghĩa không rõ ràng và không có trường hợp sử dụng đặc biệt thuyết phục.

Dường như tài liệu phản ánh phiên bản đầu tiên và cần cập nhật. Có một số documentation bug được nêu ra để giải quyết vấn đề này.

Cũng trong RFC, nó đề cập đến lý do tại sao bạn có thể không muốn sử dụng lại một máy phát điện:

tua lại để một mức độ nào đi ngược lại các khái niệm về máy phát điện, vì chúng đã được chủ yếu là dự định như là một lần các nguồn dữ liệu không được lặp lại lần khác. Mặt khác, hầu hết các máy phát điện có thể là có thể tua lại và có thể có ý nghĩa để cho phép. Người ta có thể tranh luận mặc dù tua lại một máy phát điện thực sự là thực tế xấu (đặc biệt là nếu máy phát điện đang làm một số tính toán đắt tiền). Cho phép nó tua lại sẽ trông giống như nó là một hoạt động giá rẻ, giống như với các mảng.

Các vấn đề liên quan