spl_autoload_register()
cho phép bạn đăng ký nhiều hàm (hoặc phương thức tĩnh từ lớp Autoload của riêng bạn) mà PHP sẽ đưa vào ngăn xếp / hàng đợi và gọi tuần tự khi một "Lớp mới" được khai báo.
Ví dụ:
spl_autoload_register('myAutoloader');
function myAutoloader($className)
{
$path = '/path/to/class/';
include $path.$className.'.php';
}
//-------------------------------------
$myClass = new MyClass();
Trong ví dụ trên, "MyClass" là tên của lớp mà bạn đang cố khởi tạo, PHP chuyển tên này thành một chuỗi spl_autoload_register()
, cho phép bạn chọn biến và sử dụng nó để "bao gồm" lớp / tệp thích hợp . Do đó, bạn không nhất thiết phải bao gồm lớp đó thông qua câu lệnh bao gồm / yêu cầu ...
Chỉ cần gọi lớp bạn muốn khởi tạo như trong ví dụ trên và vì bạn đã đăng ký một hàm (thông qua spl_autoload_register()
) của chính bạn sẽ tìm ra vị trí của tất cả các lớp của bạn, PHP sẽ sử dụng hàm đó.
Lợi ích của việc sử dụng spl_autoload_register()
là không giống như __autoload()
bạn không cần phải thực hiện chức năng tự động tải trong mọi tệp bạn tạo. spl_autoload_register()
cũng cho phép bạn đăng ký nhiều chức năng tự động tải để tăng tốc độ tự động tải và làm cho nó thậm chí còn dễ dàng hơn.
Thí dụ:
spl_autoload_register('MyAutoloader::ClassLoader');
spl_autoload_register('MyAutoloader::LibraryLoader');
spl_autoload_register('MyAutoloader::HelperLoader');
spl_autoload_register('MyAutoloader::DatabaseLoader');
class MyAutoloader
{
public static function ClassLoader($className)
{
//your loading logic here
}
public static function LibraryLoader($className)
{
//your loading logic here
}
Liên quan đến spl_autoload , hướng dẫn sử dụng nêu:
Chức năng này được dự định sẽ được sử dụng như là một triển khai mặc định cho __autoload()
. Nếu không có gì khác được chỉ định và spl_autoload_register()
được gọi mà không có bất kỳ tham số nào thì chức năng này sẽ được sử dụng cho bất kỳ cuộc gọi nào sau này __autoload()
.
Nói một cách thực tế hơn, nếu tất cả các tệp của bạn nằm trong một thư mục và ứng dụng của bạn không chỉ sử dụng các tệp .php, mà cả các tệp cấu hình tùy chỉnh với phần mở rộng .inc, thì một chiến lược bạn có thể sử dụng là thêm thư mục chứa tất cả các tệp đến PHP bao gồm đường dẫn (thông qua set_include_path()
).
Và vì bạn cũng yêu cầu các tệp cấu hình của mình, bạn sẽ sử dụng spl_autoload_extensions()
để liệt kê các phần mở rộng mà bạn muốn PHP tìm kiếm.
Thí dụ:
set_include_path(get_include_path().PATH_SEPARATOR.'path/to/my/directory/');
spl_autoload_extensions('.php, .inc');
spl_autoload_register();
Vì spl_autoload là cách triển khai mặc định của __autoload()
phương thức ma thuật, nên PHP sẽ gọi spl_autoload khi bạn thử và khởi tạo một lớp mới.
Hi vọng điêu nay co ich...