Giới thiệu
Để sử dụng lớp được định nghĩa trong một tập lệnh PHP khác, chúng ta có thể kết hợp nó với các câu lệnh bao gồm hoặc yêu cầu. Tuy nhiên, tính năng tự động tải của PHP không cần bao gồm rõ ràng như vậy. Thay vào đó, khi một lớp được sử dụng (để khai báo đối tượng của nó, v.v.) trình phân tích cú pháp PHP sẽ tự động tải nó, nếu nó được đăng ký với spl_autoload_register () hàm số. Vì vậy, có thể đăng ký bất kỳ số lượng lớp học nào. Bằng cách này, trình phân tích cú pháp PHP có cơ hội lớn nhất để tải lớp / giao diện trước khi phát ra lỗi.
Cú pháp
spl_autoload_register(function ($class_name) { include $class_name . '.php'; });
Lớp sẽ được tải từ tệp .php tương ứng của nó khi nó được sử dụng lần đầu tiên
Ví dụ về tự động tải
Ví dụ này cho thấy cách một Lớp được đăng ký để tự động tải
Ví dụ
<?php spl_autoload_register(function ($class_name) { include $class_name . '.php'; }); $obj = new test1(); $obj2 = new test2(); echo "objects of test1 and test2 class created successfully"; ?>
Đầu ra
Điều này sẽ tạo ra kết quả sau. -
objects of test1 and test2 class created successfully
Tuy nhiên, nếu không tìm thấy tệp .php tương ứng có định nghĩa clas, lỗi sau sẽ được hiển thị.
Warning: include(): Failed opening 'test10.php' for inclusion (include_path='C:\xampp\php\PEAR') in line 4 PHP Fatal error: Uncaught Error: Class 'test10' not found
Tự động tải với xử lý ngoại lệ
Ví dụ
<?php spl_autoload_register(function($className) { $file = $className . '.php'; if (file_exists($file)) { echo "$file included\n"; include $file; } else { throw new Exception("Unable to load $className."); } }); try { $obj1 = new test1(); $obj2 = new test10(); } catch (Exception $e) { echo $e->getMessage(), "\n"; } ?>
Đầu ra
Điều này sẽ tạo ra kết quả sau. -
Unable to load test1.