2011-11-20 18 views
30

gì đang/là những lợi ích (s) của việc có nhiều spl_autoload_registernhiều spl_autoload_register

dụ:

spl_autoload_register('autoload_systems'); 
spl_autoload_register('autoload_thirdparties'); 
spl_autoload_register('autoload_services'); 

vs:

sử dụng một

spl_autoload_register('autoload'); hoặc __autoload();

và sau đó thực hiện logic i nside chức năng.

eg: 
$ftp = new systems_ftp(); 
$services = new services_cron_email(); 

Trả lời

21

Nếu bạn có một __autoload() và bạn bao gồm thư viện của bên thứ ba cũng có thư viện thứ ba, thư viện này sẽ bị ghi đè.

Đăng ký nhiều tự động tải với spl_autoload_register() đảm bảo bạn có thể để mã của bạn bị rơi với mã hiện có (thư viện nghĩ, v.v.) mà không cần ghi đè hoặc ẩn bóng tự động tải hiện tại/tương lai.

Bên cạnh đó, PHP manual states ...

spl_autoload_register() cung cấp một lựa chọn linh hoạt hơn cho lớp tự động load. Vì lý do này, việc sử dụng __autoload() là không được khuyến khích và có thể bị phản đối hoặc bị xóa trong tương lai.

+0

nhưng có nhiều spl_autoload_register chậm hơn? –

+2

@GinoSullivan Có lẽ, nhưng tôi sẽ khó sử dụng nó như một cái cớ để viết mã sử dụng '__autoload()'. – alex

+0

cảm ơn thông tin –

-1

tôi đoán không cần phải thêm nhiều nhưng trên logic của bạn. cách hoạt động của spl_autoload_register thật tuyệt vời. suppone one có directries bên thứ 3 và đó là ussually quản lý thông qua không gian tên mà cũng đại diện cho con đường của họ. xem xét lớp này đơn giản như lớp autoloader

lớp MyAutoLoader {

public function __construct() 
{ 
    spl_autoload_register(array($this, 'load')); 
} 




function load($class) 
{ 

    $filepath = 'classes/'.$class.'.php'; 
    require_once($filepath); 

} 

}

sau đó trong tập tin chỉ mục bao gồm tập tin nạp này và tạo thể hiện của lớp này

$autoload = new MyAutoLoader(); 

bây giờ bạn có thể trực tiếp tạo ra tances lớp giả sử chúng ta có lớp 'Người' trong thư mục 'lớp \ QMS \ DỊCH VỤ \ Person.php' và cùng con đường là không gian tên của lớp đó

$ person = new QMS \ DỊCH VỤ \ Person() ;

bây giờ khi nào bạn sẽ sử dụng mới, nó sẽ kiểm tra xem lớp này tồn tại và có giá trị như một chuỗi sẽ được chuyển đến 'tải' chức năng của lớp 'MyAutoLoader'. và ở đó nó sẽ được đưa vào. hoặc u có thể thay đổi chức năng 'tải' để sửa đường dẫn của tập tin lớp ur đặt ur nếu điều kiện hoặc bất cứ điều gì cần phải thực hiện để sửa chữa đường dẫn ..

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