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
Trả lời
Đ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
.
Để 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
@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
@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
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' .
- 1. Require_once Lỗi PHP
- 2. cách require_once trong mã vạch
- 3. bao gồm, include_once, yêu cầu hoặc require_once?
- 4. require_once() hoặc die() không hoạt động
- 5. Sử dụng require_once lên thư mục không làm việc
- 6. Có một ASP MVC Equivalent cho require_once() của PHP không?
- 7. Gán nội dung cho một biến với include/require_once
- 8. Sẽ require_once và include_once cùng nhau bao gồm các tập tin hai lần?
- 9. Khắc phục sự cố "require_once (../ bootstrap.php.cache): không mở được luồng: Không có tệp hoặc thư mục"
- 10. Có cách nào để đặt phạm vi require_once() một cách rõ ràng thành toàn cục không?
- 11. Sử dụng Require_once() để bao gồm các biến kết nối cơ sở dữ liệu chính xác
- 12. J2ME VS Android VS iPhone VS Symbian VS Windows CE
- 13. Exec vs ExecWait vs ExecShell vs nsExec :: Exec vs nsExec :: ExecToLog vs nsExec :: ExecToStack vs ExecDos vs ExeCmd
- 14. bigtable vs cassandra vs simpledb vs dynamo vs couchdb vs hypertable vs riak vs hbase, họ có điểm gì chung?
- 15. ACE vs Boost vs Poco vs wxWidgets
- 16. NetSqlAzMan vs AzMan vs (?????)
- 17. & vs * và | vs +
- 18. Mathematica: Unevaluated vs Defer vs Hold vs HoldForm vs HoldAllComplete vs etc etc
- 19. Htmlentities vs addslashes vs mysqli_real_escape_string
- 20. Delegate.CreateDelegate vs DynamicMethod vs Biểu
- 21. RazorEngine vs RazorTemplates vs RazorMachine
- 22. HttpRequest vs HttpRequestMessage vs HttpRequestBase
- 23. getchar_unlocked() VS scanf() VS cin
- 24. gruntjs vs yeoman vs guard
- 25. Coroutine vs Continuation vs Generator
- 26. DataView.RowFilter Vs DataTable.Select() vs DataTable.Rows.Find()
- 27. Shmem vs tmpfs vs mmap
- 28. Processing.js vs. CAKE vs. Raphael.js
- 29. Mongoose.model vs Connection.model vs Model.model
- 30. MySQL vs Firebird vs SQLite
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
@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
@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