2010-09-02 29 views
11

Tôi biết việc sử dụng PHP cơ bản yêu cầu, yêu cầu một lần, bao gồm và bao gồm một lần. Nhưng tôi bối rối khi tôi nên sử dụng chúng.Sự khác nhau giữa PHP yêu cầu và bao gồm là gì?

Ví dụ: Tôi có 3 tệp, ví dụ: settings.php, database.php và index.php.

Trong database.php tập tin, tôi đã viết:

require_once 'settings.php'; 

và sau đó trong index.php, tôi đã viết:

require_once 'settings.php'; 
require_once 'database.php'; 

vì vậy tôi tải settings.php hai lần, là thế này sao? Bất kỳ mẹo nào sử dụng các chức năng này?

+0

Các câu hỏi như thế này không phải là cộng đồng wiki.Không phải là một vấn đề lớn, giống như một gợi ý cho tương lai –

+0

thx để biết thông tin, tôi là người mới trong trang này :) – Vina

Trả lời

17
  • include bao gồm một tập tin và ném một cảnh báo nếu các tập tin không được tìm thấy.

  • require bao gồm tệp và phát sinh lỗi nghiêm trọng nếu không tìm thấy tệp.

  • include_oncerequire_once làm tương tự, nhưng chỉ nếu tệp chưa được tải.

Tuy nhiên, nhu cầu một trong những _once chức năng thường là một dấu hiệu của thiết kế xấu. Bạn nên xây dựng kịch bản của bạn theo cách xác định rõ ràng những gì được bao gồm ở đâu.

Chọn một địa điểm cho settings.php để được bao gồm - có thể là index.php. Không cần phải thêm vào nó trong database.php.

+8

+1. Mặc dù, nitpick/ý kiến: Tôi không nghĩ rằng tôi đồng ý với 'sự cần thiết cho một trong các chức năng '_once' thường là một dấu hiệu của thiết kế xấu'. Autoloaders khá nhiều làm điều tương tự, sau khi tất cả. Tôi sẽ nói '_once' nên luôn được sử dụng cho các tệp chỉ chứa khai báo hàm/lớp/hằng số và các tệp khác cho đoạn mã tập lệnh. Trong trường hợp này tôi sẽ nói * không * bằng cách sử dụng '_once' thường là [!] Một dấu hiệu của thiết kế xấu. '_once' (trong trường hợp không có trình nạp tự động), cho phép mã của bạn được mô đun hóa một cách rõ ràng. (Trong trường hợp đặc biệt này, tôi sẽ đồng ý nó chỉ nên được bao gồm một lần ở nơi đầu tiên.) – pinkgothic

+1

@pinkgothic Tôi phải không đồng ý. Autoloaders làm việc trên cùng một nguyên tắc, * nhưng * nếu chúng đáng giá muối của chúng, chúng thực hiện kiểm tra 'class_exists()' trước khi cố gắng bao gồm. Theo kinh nghiệm của tôi (đọc, cũng * riêng * kinh nghiệm!) 'Require_once()' * thường * có nghĩa là "Tôi không chắc liệu tập tin này đã được đưa vào một số điểm khác chưa, bởi vì tôi không nắm bắt được cấu trúc của dự án . " theo như tôi có thể thấy, bất kỳ việc sử dụng '_once' nào khác có thể được ngăn chặn bằng cách kiểm tra xem tài nguyên mà tôi sắp đưa vào có sẵn không - có thể là một hàm hay một lớp. –

+0

Điều đó nói rằng, tôi chắc chắn có những trường hợp hợp pháp khi thực hiện một '_once' đơn giản là giải pháp nhanh hơn và nhanh hơn. –

2

Bạn không tải settings.php hai lần, theo PHP documentation on require_once;

Các require_once() tuyên bố là giống với yêu cầu() trừ PHP sẽ kiểm tra nếu tập tin đã được bao gồm, và nếu như vậy, không bao gồm (yêu cầu) nó một lần nữa.

0

require_once sẽ kiểm tra xem tệp đã được đưa vào chưa và chưa bao gồm tệp, vì vậy đừng lo lắng nó sẽ không tải settings.php hai lần.

0

nếu tập tin của bạn là rất quan trọng, tôi nghĩ rằng bạn nên sử dụng "đòi hỏi",
nhưng nếu không, tôi luôn luôn sử dụng bao gồm, như của PEKA trả lời
yêu cầu bao gồm một tập tin và ném một lỗi nghiêm trọng nếu các tập tin không được tìm thấy .

-2

include_once và require_once sử dụng trong Php để thêm một trang vào một ví dụ trang khác: bạn muốn thêm trang kết nối cơ sở dữ liệu conn.php trong trang chỉnh sửa edit.php bạn có thể sử dụng nó. Nhưng có sự khác nhau giữa include_once và require_once nếu hàm include_once nhận được bất kỳ lỗi nào, nó sẽ cảnh báo bạn và thực thi mã nhưng hàm require_once tìm thấy bất kỳ lỗi nào, nó sẽ dừng tập lệnh và không thực thi mã.

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