Tôi chỉ mới bắt đầu nhìn vào Zend Framework 2 (và mới cho ZF nói chung), và trong user guide, họ đang sử dụng tự động tải khi thêm một mô-đun mới. Tuy nhiên, tôi thấy giải thích là khá khó khăn cho một tân binh. Họ đang thêm một tập tin Module.php
trong thư mục module, mà trong số những người khác có chứa đoạn mã sau:Zend Framework 2 autoloading
public function getAutoloaderConfig()
{
return array(
'Zend\Loader\ClassMapAutoloader' => array(
__DIR__ . '/autoload_classmap.php',
),
'Zend\Loader\StandardAutoloader' => array(
'namespaces' => array(
__NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
),
),
);
}
Bây giờ tôi đã làm một số đào bới xung quanh để thử và tìm ra những gì tự động load này là tất cả về. Theo tôi hiểu, tính năng tự động tải sử dụng spl_autoload_register()
và là cách để tránh việc có require_once()
ở mọi nơi trong mã. Vì vậy, khi cố gắng sử dụng một lớp chưa được xác định, phương thức autoload()
đã được đăng ký sẽ được chạy, thao tác này đơn giản thực hiện tra cứu mảng và bao gồm tệp như dưới đây nếu nó được thêm vào.
// Zend/Loader/ClassMapAutoloader.php
public function autoload($class)
{
if (isset($this->map[$class])) {
require_once $this->map[$class];
}
}
Điều này có vẻ thông minh do hiệu suất. Tôi hy vọng những gì tôi vừa viết là chính xác. Dựa trên điều này, tôi đang cố gắng tìm ra những gì đang xảy ra trong getAutoloaderConfig()
từ đoạn mã đầu tiên, nhưng tôi khá bối rối. Dường như mảng được trả về bằng phương pháp này được sử dụng cho AutoloaderFactory::factory()
, nhưng tôi không chắc chắn về mục đích gì. Ngay lập tức các trình nạp tự động với các tùy chọn có vẻ như, nhưng chính xác những gì đã làm, tôi không chắc chắn. Tôi đoán mục nhập thứ hai của mảng xác định nơi để tìm các tệp nguồn cho không gian tên của mô-đun - ít nhất đó sẽ là phỏng đoán của tôi. Mục đầu tiên tôi, tuy nhiên, không chắc chắn về. Trong hướng dẫn sử dụng, nó nói như sau:
Khi chúng tôi đang phát triển, chúng tôi không cần tải các tập tin qua sơ đồ lớp, để chúng tôi cung cấp một mảng trống cho trình nạp tự động lớp.
Tệp chỉ trả về một mảng trống. Tôi không chắc mục đích của ClassMapAutoloader này là gì.
Xin lỗi nếu điểm của tôi không rõ ràng; về cơ bản tôi đang cố gắng tìm ra những gì đang xảy ra trong getAutoloaderConfig()
và những gì mymodule/autoload_classmap.php
được sử dụng cho. Nếu ai đó có thể làm sáng tỏ điều này, điều đó sẽ được nhiều người đánh giá cao!
Zend được thiết kế vô lý. – wesside
Tuyệt đối. Nhưng tôi nghĩ rằng nếu bạn tìm thấy cách của bạn xung quanh nó, nó thực sự thực sự mạnh mẽ. Giống như Magento. –
Tôi sử dụng nó tại nơi làm việc, nó có thăng trầm. Tôi thích Kohana mặc dù, và sử dụng bất kỳ thư viện Zend tôi có thể cần. Xin lỗi @ andy124, chưa sử dụng 2, xin lỗi để chiếm đoạt câu hỏi của bạn. – wesside