2012-09-16 29 views
8

Trình tự động tải lớp học php có mở tệp và kiểm tra tên lớp không? Tôi đã xem xét nó được thực sự như thế nào. Một điều tôi biết rằng đệ quy của nó? Nếu tôi sai xin vui lòng cho tôi biếtcách trình tải tự động của php hoạt động như thế nào

Như overhere đề cập: autoloader brief over view Làm thế nào PHP Autoloader làm việc

Các PHP Autoloader tìm kiếm đệ quy trong các thư mục được xác định cho các định nghĩa lớp, đặc điểm và giao diện. Không cần thêm bất kỳ cấu hình nào , trong đó tệp yêu cầu cư trú sẽ được sử dụng làm đường dẫn lớp mặc định.

Tên tệp không cần tuân theo bất kỳ quy ước nào. Tất cả các tệp được tìm kiếm cho định nghĩa lớp học. Các tệp tương tự với tên lớp hoặc kết thúc bằng .php hoặc .inc được ưu tiên. Nếu được hỗ trợ, Trình mã hóa PHP sẽ được sử dụng để phát hiện định nghĩa lớp đáng tin cậy.

+1

có vẻ như liên kết trong câu hỏi của bạn đủ tốt để biết –

+0

"Trình tải tự động lớp học php có mở tệp và kiểm tra tên lớp không?" - nó tìm kiếm tất cả các lớp trong một tập tin. – zerkms

+0

nhưng ở đâu tôi có thể biết làm thế nào nó được thực hiện, từ đầu toàn bộ quá trình nạp tự động này là những gì là thú vị với tôi như thế nào đầu tiên của nó bằng văn bản – meWantToLearn

Trả lời

14

Các autoloader PHP chỉ là một cơ chế để bao gồm một tập tin khi một lớp được xây dựng.

Nếu bạn đặt tất cả các lớp học của mình trong 1 tệp, bạn không cần trình tải tự động. Tất nhiên, khi lập trình OO bạn cung cấp cho mỗi lớp tập của riêng mình, và thats nơi autoloader do thỏa thuận hợp

Một số ví dụ:.

class AutoLoader 
{ 
    public function __construct() 
    { 
    spl_autoload_register(array($this, 'ClassLoader')); 
    } 

    public function ClassLoader($class) 
    {  
    if(class_exists($class, false)) 
     return true; 

    if(is_readable('path_to_my_classes/' . $class . '.php')) 
      include_once 'path_to_my_classes/' . $class . '.php' 
    } 
} 

$autoloader = new AutoLoader(); 

gì xảy ra ở đây là khi lớp autoloader được tạo ra, lớp phương thức Trình nạp lớp được đăng ký làm bộ nạp tự động.

Khi tạo lớp mới, trước tiên phương pháp nạp lớp là tệp cho lớp đã được tải. Nếu không, lớp được thêm vào trước với một đường dẫn và mở rộng với phần mở rộng. Nếu tập tin có thể đọc được, nó được bao gồm.

Tất nhiên, bạn có thể thực hiện điều này rất phức tạp. Hãy xem một ví dụ với các không gian tên và một người lập bản đồ. Giả sử chúng ta đang ở trong lớp tự động tải:

private $mapper array('Foo' => 'path_to_foo_files/', 'Bar' => 'path_to_bar_files/'); 

    public function ClassLoader($class) 
    {  
    if(class_exists($class, false)) 
     return true; 

    // break into single namespace and class name 
    $classparts = explode('\\', $class); 
    $path = $this->mapper[$classparts[0]]; 

    if(is_readable($path . $classparts[1] . '.php')) 
      include_once $path . $classparts[1] . '.php' 
    } 

Ở đây, tên lớp được tách trong phần không gian tên và một phần tên lớp. Phần không gian tên được tìm kiếm trong một mảng bản đồ, và đường dẫn đó sau đó được sử dụng như một đường dẫn bao gồm cho tệp php.

Đây chỉ là những ví dụ để chứng minh những gì có thể được thực hiện với trình tải tự động. Đối với sản xuất có nhu cầu một số công việc nhiều hơn để được thực hiện, kiểm tra lỗi ví dụ.

Các vấn đề liên quan