HomeLập trình

Kỹ thuật lazy loading trong lập trình hướng đối tượng PHP – Bài 8

Like Tweet Pin it Share Share Email

Lazy loading là kỹ thuật quan trọng trong các mô hình PHP Framework hiện nay. Nhiệm vụ của chúng là hỗ trợ chúng ta nạp 1 thư viện nào đó một cách tự động mà không cần phải require chúng trên đầu của mỗi trang.

Trước khi tìm hiểu chúng ta xem qua hai ví dụ dưới đây nhé.

Tạo file vd06.php có nội dung sau:

Tạo thêm file ABC.php cùng thư mục với file vd06.php nhé

Sau đó chúng ta chạy file vd06.php trên localhost được kết quả như sau:

Xin chào các bạn! đã xem ictsharing.com

Thật kỳ diệu phải không nào?

Vậy tại sao lại vậy các bạn hiểu thế này nhé:

Khi truy cập vào vd06.php -> Khi khởi tạo hàm $a = new ABC thì ngay lập tức kích hoạt hàm __autoload($url) trường hợp này autoload sẽ lấy tên ABC để đưa vào trong như một biến $url khi đó chúng ta require cái biến $url chính là file ABC.php .
Bên cạnh đó, bên trong trang ABC có phương thức test, nhiệm vụ của phương thức test này là show ra “Xin chào các bạn! đã xem ictsharing.com”. 

Như vậy chúng ta sử dụng autoload không cần phải require một file nào đó như cách lập trình thông thường. 

Với cách lập trình thông thường khi cần sử dụng đối tượng nào đó chúng ta phải reguire file chứa phương thức đó. Như vậy chỉ sử dụng một đối tượng mà phải load cả file đó thì tốn rất nhiều tài nguyên thay vì sử dụng autoload.

Bản chất của autoload là chỉ khi chúng ta khởi tạo đối tượng thì nó mới chạy, điều đó có nghĩa khi chúng ta khởi tạo nó mới đi làm việc. Khi nào cần file nào thì mới làm việc chứ không phải chúng ta require hết một loạt file trước như cách lập trình thông thường.

Phương pháp này được sử dụng phổ biến ở các framework như codeigniter hay laravel … sau này chúng ta học tới sẽ rõ hơn.

Như vậy Lazi loading là gì?

Là phương pháp tử động nạp file từ bên ngoài vào khi khởi tạo đối tượng, để sử dụng phương pháp này phải tuân thủ một số các chuẩn mực như đặt tên… Nếu không sẽ không sử dụng được.

Cú pháp là:

function __autoload(){    // do something     }

Comments (0)

Leave a Reply

Your email address will not be published. Required fields are marked *