Ok, vì vậy, đây là cách hoạt động bên trong.
Khi bạn cố gắng sử dụng một lớp không tồn tại, nó gọi mỗi một trong các cuộc gọi lại spl_autoload
từng cái một cho đến khi lớp tồn tại (và chức năng __autoload
là một trong số chúng). Nếu nó không tồn tại ở cuối chuỗi, nó sẽ làm tăng lỗi không tìm thấy lớp.
Khi bạn gọi class_exists
mà không có tham số thứ hai (cho biết không cố gắng tải nó nếu nó không tồn tại), nó gọi chuỗi gọi là spl_autoload
cho đến khi nó tìm thấy lớp hoặc phương pháp cuối cùng được gọi . Sau đó, nó trả về nếu nó tìm thấy lớp.
Vì vậy, tất cả phụ thuộc vào những gì bạn đang làm trong chức năng tự động tải. Nếu bạn làm điều gì đó như:
function __autoload($class) {
$filename = PATH_TO_CLASSES . $class . '.php';
if (!file_exists($class)) {
die('Could not find '.$class);
}
require_once $filename;
}
Nó sẽ giết thực thi và nó sẽ không hoạt động như dự định. Thay vào đó, bạn nên làm:
function __autoload($class) {
$filename = PATH_TO_CLASSES . $class . '.php';
if (file_exists($class)) {
require_once $filename;
}
}
Đó là tất cả những gì bạn cần làm.
Bây giờ, bạn không muốn tệp được thực thi. Đó là tốt. Có một giải pháp dễ dàng cho điều đó. Không đặt tệp đó vào cùng thư mục với các lớp được tải tự động của bạn. Nó đánh bại mục đích của autoloading.
Giải pháp duy nhất khác là lưu bản đồ tên lớp vào tên tệp và cơ sở tự động tải xuống của bạn. Nếu không nó sẽ luôn luôn thực hiện các tập tin (vì đó là những gì bạn đang yêu cầu nó để làm) ...
obviusly là cần thiết để sử dụng tự động load bởi vì lớp không được tải! –
Hiển thị chức năng tự động tải của bạn ... Nó sẽ hiển thị 'ClassName không tồn tại ....' sau khi 'Điều này sẽ sụp đổ tất cả', vì nó không quan tâm theo mặc định nếu lớp không được nạp. Tôi nghi ngờ bạn đang giết chết việc thực hiện trong '__autoload' chức năng nếu bạn không tìm thấy các lớp học, và bạn không nên ... – ircmaxell
Từ mã được cho kết quả không thể được sao chép. Vì vậy, đăng một số mã hơn. – tplaner