01/10/2018, 16:30
Bài 10: Kỹ thuật Lazy loading.
Nhờ có nó ta có thể tiết kiệm được rất nhiều thao tác gọi nạp file khi sử dụng. Bản thân lazy loading sử dụng phương thức magic để triệu gọi dữ liệu. Cụ thể là phương thức __autoload(). Phương thức này sẽ được tự động gọi khi một đối tượng được khởi tạo. Cũng vì lý do đó mà chúng ta sử dụng nó để ...
Nhờ có nó ta có thể tiết kiệm được rất nhiều thao tác gọi nạp file khi sử dụng. Bản thân lazy loading sử dụng phương thức magic để triệu gọi dữ liệu. Cụ thể là phương thức __autoload(). Phương thức này sẽ được tự động gọi khi một đối tượng được khởi tạo. Cũng vì lý do đó mà chúng ta sử dụng nó để require() một file chứa lớp đó.
Mình có một cấu trúc sau:
Class User
class User{ function User(){ echo 'User đã được khởi tạo'; } }
Class Product.
class Product{ function Product(){ echo 'Product đã được khởi tạo'; } }
Chẳng hạn trong file index.php bạn khai báo một đối tượng và gọi tới các thuộc tính và phương thức trong User và Product, nếu như thông thường khi bạn muốn dùng class này này thì bạn phải require hoặc include gọi file index.php vào để sử dụng.
- Code trong file index.php
define('ABSPATH',dirname(__FILE__)); // Khai báo thư mục chứa file thực hiện define('DIR_CLASSES',ABSPATH.'/classes'); // Khai báo đường dẫn tới folder classes // Require files require_once(DIR_CLASSES.'/User.php'); require_once(DIR_CLASSES.'/Product.php'); // Khởi tạo đối tượng User $user = new User(); // Kết quả: User đã được khởi tạo // Khởi tạo đối tượng Product $product = new Product(); // Kết quả: Product đã được khởi tạo
Nhưng khi bạn khai báo hàm __autoload, thì bạn chỉ việc khởi tạo đối tượng mà không cần require file nữa vì hàm _autoload đã tự động gọi cho bạn. - Code trong file index.php
define('ABSPATH',dirname(__FILE__)); // Khai báo thư mục chứa file thực hiện define('DIR_CLASSES',ABSPATH.'/classes'); // Khai báo đường dẫn tới folder classes function __autoload($class){ require(DIR_CLASSES.'/'.$class.".php"); } // Khởi tạo đối tượng User $user = new User(); // Kết quả: User đã được khởi tạo // Khởi tạo đối tượng Product $product = new Product(); // Kết quả: Product đã được khởi tạo
Ở ví dụ trên ta thấy hàm __autoload tự động gọi file User.php và Product.php ra, chúng ta chỉ việc khởi tạo lại class basic
Chú ý khi sử dụng autoload thì tên file và tên class phải giống nhau nhé