News & Events
Kỹ thuật dùng Lazy Loading trong lập trình hướng đối tượng
- 01/09/2016
- Posted by: Bùi Đạt
- Category: Video Bài giảng Video học Lập trình web
Trong bài hôm nay mình sẽ cùng các bạn tìm hiểu về kĩ thuật dùng Lazy Loading trong lập trình PHP cơ bản.
Lazy Loading là 1 trong những kỹ thuật vô cùng quan trọng trong lập trình hướng đối tượng. Bởi nhờ kĩ thuật này chúng ta có thể tiết kiệm được nhiều loại thao tác khi chúng ta gọi nạp tệp tin khi dùng. Bản thân kỹ thuật này dùng magic method để có thể gọi dữ liệu. Cụ thể là method __autoload().
Method này được gọi 1 cách tự động khi có 1 đối tượng được khởi tạo. Cũng chính bởi vậy mà ta sẽ dùng nó để require() một tệp tin có chưa lớp đấy.
Chẳng hạn:
Tạo 1 tệp tin tên là test.php với nội dung:
1 2 3 4 5 6 7 | <?php function __autoload($url){ require("$url.php"); } $abc=new ABC; $abc->demo(); ?> |
Sau đó mình sẽ tạo thêm 1 tệp tin ABC.php với nội dung:
1 2 3 4 5 6 | <?php class ABC{ public function demo(){ echo "<h2>Chào mừng đã đến với Vietpro Education</h2>"; } } |
Khi chúng ta chạy tệp tin test.php, kết quả xuất ra màn hình sẽ là:
Chào mừng đã đến với Vietpro Education
Rõ ràng là ở trên tệp tin test.php không hề có một lớp nào là ABC mà cũng không hề có một method nào là demo() cả, vậy tại sao ta lại có thể gọi được chúng ra ngoài?
Bởi đơn giản khi ta tạo class ABC thì lập tức nó sẽ gọi autoload(). Cũng như phương thức autoload() lấy tên của lớp ABC như là 1 tham số $url rồi sử dụng lệnh require() để có thể nạp tệp tin ABC.php vào.
Lúc này thì file ABC.php của ta sẽ có một class tên là ABC hay cũng có một method tên là demo() do đó tệp tin test.php của chúng ta sẽ xuất giá trị phương thức demo() ra ngoài.
Như bạn có thể thấy, thay vì trước khi ta dùng 1 lớp ta sẽ cần phải require() những lớp ở phía trên cực nhiều. Mà từ khi có lazy loading, bạn chỉ cần gọi lớp thì hệ thống sẽ tự động nạp tệp tin tương đương với lớp đó. Việc này có thể giúp chúng ta giảm thiểu tối đa thời gian cũng như tài nguyên khi thực thi việc nạp, load những thư viện ở trên đầu những tệp tin rất nhiều.
Tuy vậy bạn cũng nên lưu ý rằng. Khi chúng ta dùng cơ chế này, ta sẽ thường phải chú ý đến tên class và tên tệp tin. Chúng sẽ cần có một sự liên quan nhất thiết với nhau. Chẳng hạn: tên class và tên tệp tin giống nhau. Bởi vì nếu như nó không giống nhau thì quá trình nạp và tải tệp tin sẽ thất bại và đương nhiên, bạn sẽ không thể lấy được các class và phương thức giống mong muốn.
Kỹ thuật Lady Loading này cũng chính là kĩ thuật được dùng nhiều nhất trong tất cả PHP Framework thời nay. Ví dụ như là Zend Framework, khi chúng ta muốn gọi 1 lớp thì hay gọi như sau:
1 | $model=new Zend_Db_Table_Abstract; |
Tức là bạn đang truy nhập vào trong folder Zend rồi tiếp tục vào folder Db, sau đó vào Table rồi vào tệp tin Abstract.php. Zend/Db/Table/Abstract.php.
Và đương nhiên trong file Abstract.php sẽ cần có class tên là Zend_Db_Table_Abstract:
1 2 3 | class Zend_Db_Table_Abstract{ //code ở đây } |
Để autoload có thể hiểu điều đó thì bạn cần định nghĩa theo cách đơn giản sau:
1 2 3 4 | function __autoload($url){ $url=str_replace("_","/",$url); require("$url.php"); } |
Như chúng ta đã thấy, bạn có thể tìm kiếm mọi dấu gạch dưới bên trong lớp rồi thay thế nó bằng dấu “/”. Lúc này thì hệ thống sẽ nạp theo đúng truy trình như trên.
Trả lời Hủy
Website này sử dụng Akismet để hạn chế spam. Tìm hiểu bình luận của bạn được duyệt như thế nào.