Tự động tải lớp trong OOP trong PHP
Bạn đã biết rằng để sử dụng một lớp nào đó, chúng ta phải kết nối
nó thông qua require. Khi có rất nhiều lớp trong dự án,
sẽ có nhiều kết nối, rất bất tiện để viết và khó kiểm soát.
Để giải quyết vấn đề này, tính năng tự động tải lớp đã được thêm vào PHP. Tính năng tự động tải cho phép PHP tự động tải tệp chứa lớp khi cố gắng truy cập lớp đó trong mã. Tuy nhiên, các lớp sẽ không tự động tải một cách đơn giản - chúng cần được đặt trong các thư mục của trang web theo một cách đặc biệt, tuân theo một quy ước nào đó về tên tệp và tên thư mục của lớp. Có thể sử dụng quy ước có sẵn trong PHP, hoặc tự nghĩ ra quy ước của riêng mình và sử dụng nó.
Trước tiên, hãy phân tích quy ước tiêu chuẩn của PHP. Quy ước này nằm ở chỗ nếu chúng ta có một tệp chứa lớp, thì đường dẫn qua các thư mục của trang web đến tệp đó phải trùng khớp với không gian tên của tệp, và tên tệp phải trùng khớp với tên của lớp được lưu trữ trong đó. Đồng thời, tên thư mục và tên tệp phải ở dạng chữ thường.
Hãy xem ví dụ. Giả sử chúng ta có lớp sau:
<?php
namespace Core\Admin;
class PageController
{
}
?>
Theo quy ước, lớp này phải được đặt
trong thư mục /core/admin/ trong tệp
pagecontroller.php.
Bây giờ, hãy sử dụng lớp của chúng ta trong tệp index.php mà không kết nối nó qua require,
mà sử dụng tính năng tự động tải. Để làm điều này, ở đầu
tệp nơi các lớp được gọi, nên
gọi hàm spl_autoload_register.
Hãy thực hiện điều đó:
<?php
spl_autoload_register(); // bật tính năng tự động tải
$obj = new Core\Admin\PageController; // tạo đối tượng một cách thoải mái
?>
Trong tệp index.php, hãy bật tính năng tự động
tải lớp. Tuân theo quy ước về tên
thư mục và tệp, hãy tạo lớp Core\User,
lớp Core\Admin\Controller và lớp
Project\User\Data. Trong tệp index.php,
hãy tạo các đối tượng của những lớp này.