Giống như hầu hết các nhà phát triển web những ngày này, tôi hoàn toàn tận hưởng những lợi ích của kiến trúc MVC vững chắc cho các ứng dụng web và các trang web. Khi làm MVC với PHP, tự động tải rõ ràng là cực kỳ tiện dụng.PHP tự động tải và đặt tên chiến lược
Tôi đã trở thành người hâm mộ của spl_autoload_register
chỉ đơn giản là xác định một hàm __autoload()
duy nhất, vì điều này rõ ràng là linh hoạt hơn nếu bạn kết hợp các mô-đun cơ sở khác nhau. Tuy nhiên, tôi chưa bao giờ cảm thấy tuyệt vời về các chức năng tải mà tôi viết. Chúng liên quan đến việc kiểm tra chuỗi và quét thư mục để tìm kiếm các lớp có thể tải. Ví dụ: giả sử tôi có một ứng dụng có đường dẫn cơ sở được xác định là PATH_APP
và cấu trúc đơn giản với các thư mục có tên là models
, views
và controllers
. Tôi thường sử dụng cấu trúc đặt tên theo đó các tệp có tên là IndexView.php
và IndexController.php
bên trong thư mục thích hợp và các mô hình thường không có lược đồ cụ thể theo mặc định. Tôi có thể có một chức năng nạp cho cấu trúc này như thế này mà được đăng ký với spl_autoload_register
:
public function MVCLoader($class)
{
if (file_exists(PATH_APP.'/models/'.$class.'.php')) {
require_once(PATH_APP.'/models/'.$class.'.php');
return true;
}
else if (strpos($class,'View') !== false) {
if (file_exists(PATH_APP.'/views/'.$class.'.php')) {
require_once(PATH_APP.'/views/'.$class.'.php');
return true;
}
}
else if (strpos($class,'Controller') !== false) {
if (file_exists(PATH_APP.'/controllers/'.$class.'.php')) {
require_once(PATH_APP.'/controllers/'.$class.'.php');
return true;
}
}
return false;
}
Nếu nó không được tìm thấy sau đó, tôi có thể có một chức năng để quét thư mục con trong thư mục các mô hình. Tuy nhiên, tất cả các if/else-ing, chuỗi kiểm tra và quét thư mục có vẻ không hiệu quả với tôi, và tôi muốn cải thiện nó.
Tôi rất tò mò về cách đặt tên tệp và các chiến lược tự động tải mà các nhà phát triển khác có thể sử dụng. Tôi đang tìm kiếm đặc biệt cho các kỹ thuật tốt để sử dụng cho tự động tải hiệu quả, và không phải lựa chọn thay thế để tự động tải.
pimp +1 cho độ lạnh – Louis
Tôi chắc chắn thích cách tiếp cận gạch dưới. Nó làm cho dịch từ lớp sang tập tin hiệu quả hơn nhiều. – zombat
Quấn 'mảng_unique()' quanh mảng '$ files' của bạn. Nếu không có dấu gạch dưới trong tên lớp, bạn đang thử mỗi tệp hai lần. – mpen