Hướng dẫn dùng yield function trong PHP
Lặp lại ta có thể coi là một kiểu giả trong PHP. Nó chấp nhận bất kỳ mảng hoặc đối tượng nào triển khai giao diện Traversable. Cả hai loại này đề có thể lặp lại bằng cách sử dụng foreach và có thể sử dụng năng suất từ bên trong trình tạo. Nó có thể sử dụng làm kiểu dữ liệu cho đối số của hàm và giá trị trả về của hàm. 2. Sử dụng IterablesTa có thể sử dụng Iterables như một kiểu tham số để chỉ ra rằng một hàm yêu cầu một bộ giá trị, nhưng không quan tâm đến hình thức của bộ giá trị vì nó sẽ được sử dụng với foreach. Nếu một giá trị không phải làm một mảng hoặc bản sao của Traversable, một lỗi sẽ được hiển thị ra. Ví dụ: Sử dụng đối số hàm có thể lặp lại: Trả lại một tệp có thể lặp lại: Có thể lặp lại cũng có thể được sử dụng như một kiểu trả về để cho biết một hàm sẽ trả về một giá trị có thể lặp lại. Nếu giá trị trả về không phải là một mảng hoặc bản sao của Traversable , lỗi sẽ xảy ra. Kiểu trả về có thể lặp lại: Kiểu trả về của trình tạo có thể lặp lại: 3. Tạo lặp lại Mảng: tất cả các mảng đều có thể lặp lại , vì vậy bất kỳ mảng nào cũng có thể được sử dụng làm đối số của một hàm yêu cầu có thể lặp lại. Trình lặp lại: bất kỳ đối tượng nào triển khai giao diện Iterator đều có thể được sử dụng làm đối số của một hàm yêu cầu lặp lại. Một trình lặp chứa danh sách các mục và cung cấp các phương thức để lặp qua chúng. Nó giữ một con trỏ đến một trong các phần tử trong danh sách. Mỗi mục trong danh sách phải có một khóa có thể được sử dụng để tìm mục đó. Chắc hẳn bạn đã biết ngoài việc chạy đúng ra thì tốc độ là yếu tố sống còn tạo nên sự khác biệt của một trang web. Ứng dụng của bạn chạy càng nhanh thì trải nghiệm người dùng càng tốt. Chính vì thế, ở vị trí của một developer, chúng ta luôn luôn mong muốn tìm mọi cách để cải thiện hiệu năng của sản phẩm mà chúng ta làm ra. Và Generators sẽ tạo ra sự khác biệt rất lớn về tốc độ và quản lý bộ nhớ. PHP Generators là gì? Được thêm vào PHP trong phiên bản 5.5, generators cung cấp một cách đơn giản để lặp qua dữ liệu mà không cần phải xây dựng một mảng trong bộ nhớ. Trước tiên hãy nhanh chóng tạo ra một file generator.php Khi chúng ta chạy đoạn code trên, chúng ta sẽ thấy như sau: Đoạn code này khá dễ hiểu, đến đây thì nó vẫn chạy bình thường và không có vấn đề gì xảy ra. Nhưng nếu chúng ta sửa lại đoạn code trên một chút: Chắc bạn cũng đã biết là PHP_INIT_MAX là số lớn nhất mà PHP có thể tạo ra. Sau khi thực hiện đoạn code này, bạn sẽ nhận thấy sự khác biệt. Thông báo này chỉ ra rằng PHP server của chúng ta đang bị tràn bộ nhớ. Có thể bạn sẽ nghĩ ngay đến việc mở file php.ini ra và tăng memory_limit lên, nhưng cách giải quyết này có thực sự hiệu quả. Liệu chúng ra có muốn tạo ra một đoạn code mà nó ngốn hết cả bộ nhớ của máy chủ không? Câu trả lời chắc chắn sẽ là không và không. Điều này không hiệu quả và chúng ta cũng không bao giờ muốn một đoạn code mà có thể ngốn hết cả tài nguyên của máy chủ. Sử dụng Generators Vẫn là đoạn code ở trên vẫn là PHP_INIT_MAX, nhưng ở lần này chúng ta sử dụng generators function. Nhìn vào function getRange(), chúng ta sẽ thấy rằng thay vì sử dụng return thì chúng ta sử dụng yield. yield tương tự như return vì nó cũng trả về một giá trị từ một hàm. Tuy nhiên Đã không còn lỗi tràn bộ nhớ, trong một thời gian cho phép trình duyệt đã hiển thị được kết quả như chúng ta mong muốn. Có thể thấy được bản thân Note: Một lưu ý nhỏ rằng chúng ta chỉ có thể sử dụng generators trong một hàm. Tại sao nên sử dụng Generators? Trong rất nhiều trường hợp chúng ta muốn xử lý một tập dữ liệu rất lớn (ví dụ như dữ liệu từ các file log hệ thống) hoặc muốn tính toán xử lý trên một mảng với vô cùng lớn các phần tử. Rõ ràng chúng ta không hề muốn việc xử lý trên các tập dữ liệu đó chiếm dụng một lượng lớn thậm chí là tất cả bộ nhớ của chúng ta và việc nên làm là tìm cách tiết kiệm bộ nhớ càng nhiều càng tốt. Thay vì phải lưu trữ cả một tập dữ liệu lớn như vậy, chúng ta có thể sử dụng các Returning Keys Trong một số trường hợp, dữ liệu của chúng ta cần biểu diễn dưới dạng key-value. Khi sử dụng Generators, chúng ta có thể làm việc đó như sau: Sau đó chúng ta có thể sử dụng cặp giá trị Truyền tham số vào trong Generators. Giả sử như chúng ta muốn thêm một vài tham số để quy định cách hoạt động của Để truyền giá trị này, chúng ta có thể làm như sau: Note: Chúng ta có thể sử dụng từ khóa Kết luận
|