2012-11-29 22 views
5

Tôi có một nghi ngờ về cách thức/thực hành tốt nhất về việc tải các lớp phụ thuộc vào PHP.Cách thích hợp để tải các phụ thuộc trong PHP là gì?

Tôi thường đặt tất cả các phụ thuộc vào đầu mỗi lớp với một số include_once theo cách tương tự như nhập Java. Một cái gì đó như:

include_once 'dto/SomeObjectDTO.php;' 
include_once 'dao/SomeObjectDAO.php;' 
include_once 'util/SomeObjectUtil.php;' 

class SomeObjectService{ 
    #class code here 
} 

Đây là cách tốt nhất để tải lớp học? Hoặc có thể tải tất cả các lớp học trong một Bootstrap.php? Những cách khác?

Lưu ý rằng tôi đang nói về việc tải các lớp của riêng mình chứ không phải các lớp bên ngoài phức tạp như khung công tác.

+4

Sử dụng trình nạp tự động thường được coi là thực hành tốt nhất hiện nay –

+0

PHP rất nhanh ... Bạn cũng có thể sử dụng phương pháp này .... –

Trả lời

2

Giống như Homer6 nói, tự động load là một php của xây dựng trong cơ chế phụ thuộc tải.

PHP-FIG đề xuất một họ các tiêu chuẩn mã hóa PHP được gọi là PSR. PSR-0 đề cập đến việc đặt tên lớp và tự động tải. Dưới đây là một số liên kết:

Ngoài ra, hãy nhớ, tự động load mà đi kèm với một mức giá. Có rất nhiều công việc chuỗi và làm việc với các fs trong trình nạp tự động mặc định được đề xuất (bạn có thể triển khai trình nạp tự động nhanh hơn của riêng mình, nhưng nó sẽ không phù hợp với tiêu chuẩn). Điều này làm cho tải tự động chậm khi bạn cần tải nhiều lớp. Vì vậy, nếu bạn chỉ cần tải 2 lớp, cách tiếp cận của bạn sẽ nhanh hơn và dễ hiểu hơn.

2

PHP bạn có thể đăng ký phương thức tự động tải của mình. Symfony 2 chứa một lớp học tốt để làm điều đó.

http://php.net/manual/en/function.spl-autoload-register.php

Tôi đã điều chỉnh nó để làm việc với thư viện mà chúng tôi đã viết.

https://github.com/homer6/altumo/blob/master/source/php/loader.php

https://github.com/homer6/altumo/blob/master/source/php/Utils/UniversalClassLoader.php

thích ứng này cho phép bạn có không gian tên mà không đòi hỏi không gian tên cấp cao nhất có tên cùng một thư mục.

1
set_include_path(get_include_path() 
     . PATH_SEPARATOR . 'path1' 
     . PATH_SEPARATOR . 'path2' 
); 

// auto load classes: 
function autoloadClasses($className) { 
require_once $className . '.php'; 
} 

spl_autoload_register('autoloadClasses'); 
Các vấn đề liên quan