2011-09-01 24 views
6

Tôi đã tự hỏi khi nào bạn cần sử dụng module_load_include() hoặc require_once để bao gồm các tệp nằm trong mô-đun của bạn.module_load_include() vs require_once

+0

Drupal là mã nguồn mở, bạn có thể làm một kiểm tra về làm thế nào là chức năng này bằng văn bản – ajreal

+0

@ajreal: nó vẫn còn là một câu hỏi hợp pháp. Ngay cả [Drupal manual page] (http://api.drupal.org/api/drupal/includes--module.inc/function/module_load_include/6) không đưa ra một trường hợp dứt khoát để sử dụng nó trên 'require_once'. Trong thực tế, một câu hỏi tương tự đã được hỏi trong các ý kiến ​​trên trang đó, và câu trả lời là "đó là Drupal-ish nhiều hơn để sử dụng nó", mà không thực sự là một câu trả lời rất hữu ích khi bạn đang cố gắng tìm ra những gì tốt nhất thực hành trong bất kỳ tình huống nào. – Spudley

+0

@ajreal: Bây giờ tôi đang làm gì, tôi chỉ tự hỏi nếu bạn cần sử dụng module_load_include nếu bạn muốn bao gồm các tập tin từ trong cùng một mô-đun. – Frederic

Trả lời

13

Điều quan trọng là hàm Drupal module_load_include() vượt quá tiêu chuẩn PHP require_once chuẩn là nó tham chiếu đường dẫn của mô-đun khi tìm tệp, sử dụng drupal_get_path().

Nếu bạn sử dụng require_once, bạn sẽ phải tự mình làm điều này một chút. Một điều khác nó làm là kiểm tra xem tệp có tồn tại trước khi cố gắng bao gồm nó hay không, điều này rất tiện lợi để tránh các sự cố gây tử vong, nhưng thay vì vô nghĩa nếu bạn sẽ nhận được một lỗi khi bạn cố gọi các hàm bạn đã cố gắng bao gồm. Đây là tiện dụng mặc dù cho phép bạn tạo ra các lỗi có ý nghĩa hơn.

Vào cuối ngày, module_load_include() thực sự chỉ là một chức năng tiện ích nhỏ do Drupal cung cấp để giúp mọi việc dễ dàng hơn một chút cho bản thân. Nếu bạn biết vị trí của tập tin, và bạn biết nó tồn tại ở đó, có rất ít nhu cầu sử dụng hàm Drupal; bạn cũng có thể sử dụng require_once.

+2

Để giải thích rõ ràng hơn, mô-đun của bạn có thể được cài đặt trong các trang/tất cả/modules /, sites/all/modules/contrib /, sites/site.com/modules, vv module_load_include() sẽ biết vị trí module của bạn được cài đặt và sử dụng đường dẫn chính xác. – Berdir

+0

@Berdir: hoàn toàn chính xác. Mặt khác, nếu bạn bao gồm nó từ bên trong một tệp khác trong cùng một mô-đun, bạn chỉ cần biết đường dẫn tương đối, vì vậy 'require_once' sẽ đủ. 'module_load_include()' thường sẽ được sử dụng tốt hơn khi bao gồm một tệp mô-đun từ bên ngoài mô-đun đó (ví dụ như cần được thực hiện bởi mã trong lõi Drupal) Bạn hoàn toàn đúng; cả hai đều có vị trí của mình. – Spudley

+5

@Spudley đường dẫn tương đối luôn bắt đầu từ tệp được yêu cầu ban đầu, đó là index.php. Để thực sự bao gồm một tệp từ mô-đun của riêng bạn, bạn phải sử dụng một thủ thuật như dirname (\ __ FILE__) để lấy vị trí của tệp .module của bạn. – Berdir

1

module_load_include yêu cầu Drupal được tải đầy đủ (Khởi động hoàn toàn).

cú pháp: module_load_include ($ type, $ module, $ name = NULL);

Ví dụ: module_load_include('inc','module_name','file_name');

nếu u muốn sử dụng chức năng này trong bối cảnh toàn cầu sau đó sử dụng require_once

require_once không cần nó.

Ví dụ: require_once DRUPAL_ROOT . '/path/file' .

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