Sự khác biệt giữa yêu cầu, bao gồm, request_once và include_once?


Câu trả lời:


1426

requireinclude_oncelà tốt.

Vì vậy, câu hỏi của bạn nên ...

  1. Khi nào tôi nên sử dụng requireso với include?
  2. Khi nào tôi nên sử dụng require_oncevs.require

Câu trả lời cho 1 được mô tả ở đây .

Hàm Yêu cầu () giống hệt với hàm (), ngoại trừ việc nó xử lý các lỗi khác nhau. Nếu xảy ra lỗi, hàm include () tạo cảnh báo, nhưng tập lệnh sẽ tiếp tục thực thi. Yêu cầu () tạo ra một lỗi nghiêm trọng và tập lệnh sẽ dừng lại.

Câu trả lời cho 2 có thể được tìm thấy ở đây .

Câu lệnh allow_once () giống hệt với request () ngoại trừ PHP sẽ kiểm tra xem tệp đã được bao gồm chưa, và nếu vậy, không bao gồm (yêu cầu) nó một lần nữa.


58
Lưu ý rằng yêu cầu () thực thi nhanh hơn request_once (), vì vậy nếu bạn chắc chắn không có trùng lặp bao gồm yêu cầu sử dụng ().
dialex

48
@DiAlex, request_once chậm hơn, nhưng hầu như không đo được.
Hợp đồng của giáo sư Falken vi phạm

77
@DiAlex ... và, nếu thực tế là tập tin đã được bao gồm, thì require_once()sẽ nhanh hơn cả hai
Tom

11
@ Prof.Falken Trong hoàn cảnh nào cần một người yêu cầu cùng một tệp nhiều lần ?? Tôi không thể nghĩ về một trong tâm trí hiện tại của tôi.
Weishi Zeng

17
@WeishiZeng cho các trang web, có thể có các đoạn mã HTML mà bạn muốn đưa vào nhiều lần.
James Beninger

406

Sử dụng

  • yêu cầu
    khi tệp được yêu cầu bởi ứng dụng của bạn, ví dụ: mẫu tin nhắn quan trọng hoặc tệp chứa biến cấu hình mà không có ứng dụng sẽ phá vỡ.

  • Yêu cầu
    khi tệp chứa nội dung sẽ gây ra lỗi trong lần đưa vào tiếp theo, ví dụ: function important() { /* important code */}chắc chắn là cần thiết trong ứng dụng của bạn nhưng vì các chức năng không thể được khai báo lại nên không được đưa vào lại.

  • bao gồm khi tệp không bắt buộc và luồng ứng dụng sẽ tiếp tục khi không tìm thấy, ví dụ:
    tuyệt vời cho các mẫu tham chiếu các biến từ phạm vi hiện tại hoặc một cái gì đó

  • include_once
    phụ thuộc tùy chọn sẽ tạo ra lỗi trong lần tải tiếp theo hoặc có thể bao gồm tệp từ xa mà bạn không muốn xảy ra hai lần do chi phí HTTP

Nhưng về cơ bản, tùy thuộc vào bạn khi nào nên sử dụng.


Tôi có kết nối PDO (với cơ sở dữ liệu) . Có nên dùng cái nào không? include? include_once? require? require_once?
Shafizadeh

6
Đây phải là câu trả lời được chấp nhận vì nó trả lời ngắn gọn câu hỏi và liên kết đến hướng dẫn sử dụng chính thức, thay vì câu trả lời khác chỉ liên kết w3schools.
Daniel W.

9
cho tôi một lý do tại sao bạn sẽ bao gồm nó nếu nó không cần thiết?
Francisco Ochoa

1
Tôi đang sử dụng một mẫu cho bố cục trang chung có các phần như tiêu đề, cột, chân trang, v.v ... Điều này cho phép tôi phục vụ mẫu đó cho mọi trang trên trang web và tôi chỉ cần tạo tệp trong cấu trúc thư mục trang xác định những gì nên đi vào từng vị trí đó Nếu tôi quyết định rằng một trang không cần thanh bên, tôi chỉ cần bỏ tệp đó trong thư mục cho trang đó và mẫu vẫn hoạt động tốt mà không có tệp đó tồn tại.
James Coyle

301

Đề nghị của tôi là chỉ sử dụng require_once99,9% thời gian.

Sử dụng requirehoặc includethay vào đó ngụ ý rằng mã của bạn không thể tái sử dụng ở nơi khác, tức là các tập lệnh bạn đang thực hiện thực thi mã thay vì cung cấp một lớp hoặc một số thư viện hàm.

Nếu bạn được yêu cầu / bao gồm mã thực thi tại chỗ, đó là mã thủ tục và bạn cần tìm hiểu một mô hình mới . Giống như lập trình hướng đối tượng, lập trình dựa trên chức năng hoặc lập trình chức năng.

Nếu bạn đã thực hiện OO hoặc lập trình chức năng, việc sử dụng include_oncechủ yếu sẽ bị trì hoãn ở nơi trong ngăn xếp bạn tìm thấy lỗi / lỗi. Bạn có muốn biết rằng chức năng do_cool_stuff()này không khả dụng khi bạn gọi cho nó sau, hoặc thời điểm mà bạn mong đợi nó có sẵn bằng cách yêu cầu thư viện? Nói chung, tốt nhất là nên biết ngay nếu thứ bạn cần và mong đợi không có sẵn, vì vậy hãy sử dụng require_once.

Ngoài ra, trong OOP hiện đại, chỉ cần tự động tải các lớp của bạn khi sử dụng.


41
+1 Đây phải là câu trả lời được chấp nhận. Những điểm mấu chốt là rằng includegia đình là thường là một ý tưởng hoàn toàn xấu (vì nó khá hiếm được bao gồm các file có bất kỳ khả năng không tồn tại), và đó ra khỏi require_oncerequire, bạn nên sử dụng require_oncekhi bao gồm các file đó xác định các chức năng hoặc các lớp học được được sử dụng ở nơi khác hoặc khởi tạo các singletons như các đối tượng kết nối cơ sở dữ liệu và sử dụng requiređể bao gồm các tệp ngay lập tức thực hiện công cụ khi chúng được đưa vào. Trong bất kỳ ứng dụng web lớn nào, loại bao gồm sau là không bình thường.
Đánh dấu Amery

7
+1 (có một huy hiệu vàng khác;)) Đồng ý rằng require_oncerất có thể ứng cử viên sẽ được sử dụng gần như mọi lúc. Do sự khác biệt nhỏ giữa các lựa chọn, requiređảm bảo dừng tập lệnh, tôi không thể nghĩ ra nhiều tình huống trong đó một ứng dụng có thể tồn tại mà không có tệp nào được đưa vào. Và _oncebảo vệ khỏi các vấn đề dupe. Bất cứ ai không đồng ý đều có thể biết những gì họ đang làm có thể chọn bất kỳ ứng dụng nào phù hợp với ứng dụng hoặc kịch bản.
James

này, tôi có một tệp đôi khi được bao gồm trong trang chỉ mục và thời gian được gọi trực tiếp (home.php) ........... bây giờ tôi đã bao gồm tệp cấu hình trên trang chỉ mục với chức năng yêu cầu bây giờ tôi có thể sử dụng allow_once trong home.php để ngăn chặn bao gồm
Ravinder Payal

@RavinderPayal Vâng, lời khuyên đầu tiên của tôi là hãy tự cứu mình bằng cách sử dụng bộ điều khiển trước! Chỉ vì một người dùng gọi example.com/home không có nghĩa là bạn nên có một home.php hoàn toàn riêng biệt! Thay vào đó / home / chỉ nên định tuyến qua bộ điều khiển phía trước của index.php hoặc front.php. Chỉ php thực sự cho phép tiếp cận "một tập lệnh trên một trang" cũ, và tin tôi đi, đó không phải là cách tốt nhất. Nhưng nếu bạn PHẢI có một home.php và index.php riêng biệt, thì bất cứ thứ gì CÓ THỂ ĐI TRONG CẢ đều phải có trong một tệp thư viện hoặc mẫu, ../temsheet/home.tpl hoặc ../view/home.view.php bạn biết?
Kzqai

SNS của nó và tôi chọn một tệp tiếp cận một trang ban đầu để dễ dàng phát triển và một chồng tệp lớn mà tôi không thể tạo lại và bây giờ tôi đã giải quyết vấn đề đó và lý do khác để thực hiện một tệp một trang là tốc độ và ít tiếp xúc với đĩa cứng giảm số lượng bao gồm
Ravinder Payal

36

Sự khác biệt giữa các hàm _once và không có các hàm _once: không có mã _once sẽ được đưa vào một lần nữa trong khi với các hàm _once PHP theo dõi các tệp được bao gồm và sẽ chỉ bao gồm một lần.

Sự khác biệt giữa yêu cầu và bao gồm: Nếu không tìm thấy tệp yêu cầu, PHP sẽ phát ra lỗi nghiêm trọng trong khi chỉ bao gồm cảnh báo sẽ được phát ra.


1
Wow ngắn gọn và đơn giản!
Vlad

31

include() sẽ đưa ra cảnh báo nếu không thể bao gồm tệp, nhưng phần còn lại của tập lệnh sẽ chạy.

require()sẽ ném E_COMPILE_ERRORvà tạm dừng tập lệnh nếu nó không bao gồm tệp.

Các chức năng include_once()require_once()sẽ không bao gồm tệp lần thứ hai nếu nó đã được bao gồm.

Xem các trang tài liệu sau:


22

Bất cứ khi nào bạn đang sử dụng require_once()có thể được sử dụng trong một tệp để bao gồm một tệp khác khi bạn cần tệp được gọi chỉ một lần duy nhất trong tệp hiện tại. Ở đây trong ví dụ tôi có một test1.php.

<?php  
echo "today is:".date("Y-m-d");  
?>  

và trong một tệp khác mà tôi đã đặt tên test2.php

<?php  
require_once('test1.php');  
require_once('test1.php');  
?>

vì bạn đang xem m yêu cầu tệp test1 hai lần nhưng tệp sẽ bao gồm test1 một lần và để gọi lần thứ hai, điều này sẽ bị bỏ qua. Và không dừng lại sẽ hiển thị đầu ra một lần duy nhất.

Bất cứ khi nào bạn đang sử dụng 'include_once () `có thể được sử dụng trong một tệp để bao gồm một tệp khác khi bạn cần tệp được gọi nhiều lần trong tệp hiện tại. Ở đây trong ví dụ tôi có một tệp có tên test3.php.

<?php  
echo "today is:".date("Y-m-d");  
?> 

Và trong một tập tin khác mà tôi đã đặt tên là test4.php

<?php  
include_once('test3.php');  
include_once('test3.php');  
?>

vì bạn đang xem m bao gồm tệp test3 sẽ bao gồm tệp một lần nhưng tạm dừng thực hiện thêm.


'ví dụ tốt hơn lời khuyên'
Ramesh Kithsiri HettiArachchi

19

Sử dụng "bao gồm" cho các mẫu PHP có thể sử dụng lại . Sử dụng "yêu cầu" cho các thư viện cần thiết.

"* _once" là tốt, bởi vì nó kiểm tra xem tệp đã được tải hay chưa, nhưng nó chỉ có ý nghĩa đối với tôi trong "allow_once".


18

Bạn nên giữ các định nghĩa lớp và chức năng được tổ chức trong các tệp.

Sử dụng require_once()để tải phụ thuộc (lớp, hàm, hằng).

Sử dụng require()để tải các tệp giống như mẫu .

Sử dụng include_once()để tải các phụ thuộc tùy chọn (các lớp, hàm, hằng).

Sử dụng include()để tải các tệp giống như mẫu tùy chọn .


16

Một câu trả lời sau 7 năm cho năm 2018

Câu hỏi này đã được hỏi bảy năm trước, và không có câu trả lời nào cung cấp trợ giúp thiết thực cho câu hỏi. Trong lập trình PHP hiện đại, bạn chủ yếu required_oncechỉ sử dụng một lần để bao gồm lớp trình tải tự động của bạn (trình tải tự động của trình soạn thảo thường xuyên) và nó sẽ tải tất cả các lớp và hàm của bạn (các tệp chức năng cần được thêm rõ ràng vào composer.jsontệp để có sẵn trong tất cả các tệp khác). Nếu vì bất kỳ lý do nào, lớp của bạn không thể tải được từ trình tải tự động mà bạn sử dụng require_onceđể tải nó.

Có một số dịp chúng ta cần sử dụng require. Ví dụ: nếu bạn có một định nghĩa mảng thực sự lớn và bạn không muốn thêm nó vào mã nguồn định nghĩa lớp, bạn có thể:

 <?php
// arr.php
return ['x'=>'y'];

 <?php
//main.php
$arr= require 'arry.php'

Nếu tệp bạn định đưa vào chứa thứ gì đó có thể thực thi được hoặc khai báo một số biến bạn hầu như luôn cần sử dụng require, bởi vì nếu bạn sử dụng require_oncengoài vị trí đầu tiên, mã của bạn sẽ không được thực thi và / hoặc các biến của bạn sẽ không khởi động âm thầm, gây ra lỗi là hoàn toàn khó để xác định chính xác.

Không có trường hợp sử dụng thực tế cho includeinclude_oncethực sự.


+1 để đề cập đến trình tải tự động. Tuy nhiên, câu cuối cùng là không thể tranh cãi. Thông thường, bạn sẽ sử dụng một include()bộ đệm đầu ra để triển khai công cụ tạo khuôn mẫu của mình.
haz

Ngoài ra, với các trình soạn thảo văn bản hiện đại và PHP hiện đại, hầu như không ai sử dụng require()để phân chia các tệp lớn.
haz

Tôi đã gặp phải vấn đề tương tự khi sử dụng require_oncecho PHPMailer bên trong một hàm và trình tải tự động của tôi xác định $mailbiến cần thiết sau này trong mã, do đó, cái tiếp theo require_oncebị bỏ qua, $mailkhông được khởi tạo! giải pháp đơn giản là sử dụng requiresau khi gọi hàm.
Youssef

@haz Có lý do nào bạn không sử dụng requiretrong những trường hợp đó không?
PHP

@ChristofferBubach LOL.
PHP

15

Sự khác biệt là trong lỗi các lệnh tạo ra. Với require, tập tin bạn muốn sử dụng thực sự cần thiết và do đó sẽ tạo ra E_ERRORnếu không tìm thấy.

require()là giống hệt như include() ngoại trừ khi thất bại, nó cũng sẽ tạo ra một E_ERROR lỗi nghiêm trọng .

includechỉ tạo ra một E_WARNINGlỗi nếu nó không hoạt động.

Vì vậy, sử dụng nó nếu tập tin được yêu cầu để làm cho mã còn lại hoạt động và bạn muốn tập lệnh không thành công tập tin.


Dành cho *_once():

include_once() có thể được sử dụng trong trường hợp cùng một tệp có thể được bao gồm và đánh giá nhiều lần trong khi thực thi tập lệnh cụ thể, vì vậy trong trường hợp này, nó có thể giúp tránh các vấn đề như xác định lại chức năng, xác định lại giá trị biến, v.v.

require_once()Tất nhiên áp dụng cho tất nhiên.


Tham khảo: require(),include_once()


requirecung cấp cho E_COMPILE_ERROR, không phải E_ERROR.
Yousha Aleayoub

Có vẻ như nó đã thay đổi trong 7 năm qua.
Felix Kling

9

Với yêu cầu tệp phải tồn tại, nếu không thì sẽ xuất hiện lỗi; trong khi có kèm theo - nếu tệp không tồn tại thì trang sẽ tiếp tục tải.


8

Yêu cầu các phần quan trọng, như ủy quyền và bao gồm tất cả những người khác.

Nhiều bao gồm chỉ là thiết kế rất xấu và phải tránh tất cả. Vì vậy, * _once không thực sự quan trọng.


7

Bao gồm / Yêu cầu bạn có thể bao gồm cùng một tệp nhiều lần:

Yêu cầu () giống hệt với bao gồm () trừ khi thất bại, nó cũng sẽ tạo ra lỗi cấp độ E_COMPILE_ERROR nghiêm trọng. Nói cách khác, nó sẽ tạm dừng tập lệnh trong khi bao gồm () chỉ phát ra cảnh báo (E_WARNING) cho phép tập lệnh tiếp tục.

Yêu cầu / bao gồm / bao gồm

là giống hệt với bao gồm / yêu cầu ngoại trừ PHP sẽ kiểm tra xem tệp đã được bao gồm chưa và nếu có, không bao gồm (yêu cầu) lại.


5

include()sẽ tạo cảnh báo khi không tìm thấy tệp nhưng require_once()sẽ tạo ra lỗi nghiêm trọng.

Một điều nữa là nếu tập tin được bao gồm trước đó. Sau đó require_once()sẽ không bao gồm nó một lần nữa.


5

Tôi đã sử dụng chức năng như dưới đây:

function doSomething() {
    require_once(xyz.php);
    ....
}

Có các giá trị không đổi được khai báo trong xyz.php.

Tôi phải gọi hàm doS Something () này từ một tệp script PHP khác.

Nhưng tôi đã quan sát hành vi trong khi gọi hàm này trong một vòng lặp, vì lần lặp đầu tiên doS Something () đã nhận được các giá trị không đổi bên trong xyz.php, nhưng sau đó mỗi lần lặp lại doSomething()không thể nhận được các giá trị không đổi được khai báo xyz.php.

Tôi đã giải quyết vấn đề của mình bằng cách chuyển từ require_once()sang include(), doSomething()mã cập nhật như sau:

function doSomething() {
    include(xyz.php);
    ....
}

Bây giờ mỗi cuộc gọi lặp để doSomething()nhận các giá trị không đổi được xác định trong xyz.php.


4

Từ hướng dẫn :

require()là giống hệt như include()ngoại trừ khi thất bại, nó cũng sẽ tạo ra một E_COMPILE_ERRORlỗi nghiêm trọng . Nói cách khác, nó sẽ tạm dừng tập lệnh trong khi include()chỉ phát ra cảnh báo ( E_WARNING) cho phép tập lệnh tiếp tục.

Điều này cũng đúng với các _once()biến thể.


4

Trong thời đại của trình tải PSR-0 / PSR-4tự động, có thể hoàn toàn không cần thiết sử dụng bất kỳ câu lệnh nào nếu tất cả những gì bạn cần là làm cho một số hàm / lớp có sẵn cho mã của bạn (tất nhiên, bạn vẫn cần require_oncetự động tải trong tệp và includemẫu bootstrap của mình nếu bạn vẫn sử dụng PHP làm công cụ mẫu).


3

 

  1. Khi nào nên sử dụng requirehay include?

    Các hàm requirevà các includehàm thực hiện cùng một tác vụ, nghĩa là bao gồm và đánh giá tệp đã chỉ định, nhưng sự khác biệt requiresẽ gây ra lỗi nghiêm trọng khi vị trí tệp được chỉ định không hợp lệ hoặc cho bất kỳ lỗi nào trong khi includesẽ tạo cảnh báo và tiếp tục thực thi mã.

    Vì vậy, bạn có thể sử dụng requirechức năng trong trường hợp tệp bạn đang cố gắng đưa vào là trái tim của hệ thống và có thể gây ra tác động lớn đến phần còn lại của mã và bạn có thể sử dụng includechức năng khi tệp bạn đang cố gắng đưa vào là tập tin đơn giản chứa một số mã ít quan trọng.

    Và khuyến nghị cá nhân của tôi (đối với mã ít quan trọng hơn) là sử dụng requirechức năng ở mọi nơi trong mã của bạn trong khi đang trong giai đoạn phát triển để bạn có thể gỡ lỗi mã và sau đó thay thế tất cả các requirechức năng bằng includechức năng trước khi chuyển nó sang sản xuất để nếu bạn bỏ lỡ bất kỳ lỗi nào nó sẽ không ảnh hưởng đến người dùng cuối và phần còn lại của mã thực thi đúng cách ...

  2. Khi nào nên sử dụng require_oncehay require?

    Sự khác biệt cơ bản giữa requirerequire_oncerequire_oncesẽ kiểm tra xem các tập tin đã được bao gồm hoặc không nếu nó đã được đưa vào thì sẽ không bao gồm các tập tin trong khi requirechức năng sẽ bao gồm các tập tin cho dù tập tin đã được bao gồm hoặc không.

    Vì vậy, trong trường hợp bạn muốn bao gồm một số đoạn mã lặp đi lặp lại, hãy sử dụng requirehàm trong khi nếu bạn muốn bao gồm một số mã chỉ một lần trong mã của mình, hãy sử dụng require_once.


2
  1. Sử dụng chức năng yêu cầu khi bạn cần tải bất kỳ lớp, chức năng hoặc phụ thuộc.

  2. Sử dụng chức năng bao gồm khi bạn muốn tải tệp theo kiểu mẫu

Nếu bạn vẫn còn bối rối, chỉ cần sử dụng allow_once cho tất cả các thời gian.


1

Chúng là tất cả các cách bao gồm các tập tin.

Yêu cầu có nghĩa là nó cần nó. Require_once có nghĩa là nó sẽ cần nó nhưng chỉ yêu cầu một lần. Bao gồm có nghĩa là nó sẽ bao gồm một tệp nhưng nó không cần nó để tiếp tục.

Ví dụ:

Require 'filename'
Require_once 'filename'
Include 'filename'

Ngoài ra còn có một hàm include_once bao gồm một tệp một lần.

Include_once 'filename'

Đừng sử dụng chữ in hoa mà tôi có khi tôi đang gõ từ điện thoại của mình.


1

một điều tôi nhận thấy, khi sử dụng bao gồm tôi chỉ có thể truy cập các chức năng tệp được bao gồm từ tệp bao gồm nó. Với allow_once, tôi có thể chạy chức năng đó trong tệp required_once thứ hai.

cũng: tôi khuyên bạn nên thêm

if(file_exists($RequiredFile)){
    require_once($RequiredFile);
}else{
  die('Error: File Does Not Exist');
}

Bởi vì khi request_once giết trang, đôi khi nó có thể lặp lại thư mục của các tệp trang web của bạn

Đây là một chức năng tùy chỉnh tôi đã thực hiện để yêu cầu các tệp:

function addFile($file, $type = 'php', $important=false){
    //site-content is a directory where I store all the files that I plan to require_once
    //the site-content directory has "deny from all" in its .htaccess file to block direct connections
    if($type && file_exists('site-content/'.$file.'.'.$type) && !is_dir('site-content/'.$file.'.'.$type)){
        //!is_dir checks that the file is not a folder
        require_once('site-content/'.$file.'.'.$type);
        return 'site-content/'.$file.'.'.$type;
    }else if(!$type && file_exists('site-content/'.$file) && !is_dir('site-content/'.$file)){
        //if you set "$type=false" you can add the file type (.php, .ect) to the end of the "$file" (useful for requiring files named after changing vars)
        require_once('site-content/'.$file);
        return 'site-content/'.$file;
    }else if($important){
        //if you set $important to true, the function will kill the page (which also prevents accidentally echoing the main directory path of the server)
        die('Server Error: Files Missing');
        return false;
    }else{
        //the function returns false if the file does not exist, so you can check if your functions were successfully added
        return false;
    }
}

ví dụ sử dụng:

$success = addFile('functions/common');

if($success){
    commonFunction();
}else{
    fallbackFunction();
}

0

Về cơ bản, nếu bạn yêu cầu một đường dẫn sai, PHP sẽ đưa ra một lỗi nghiêm trọng và hàm tắt máy được gọi, nhưng khi bạn bao gồm một đường dẫn sai, PHP sẽ tiếp tục thực thi, nhưng nó sẽ chỉ hiển thị một cảnh báo rằng tệp không tồn tại.

Từ yêu cầu từ tiếng Anh , PHP được thông báo rằng việc thực thi trang hoặc tệp phụ thuộc vào tệp được yêu cầu.

Theo kinh nghiệm của tôi, nó là chuẩn để yêu cầu các tệp quan trọng như tệp cấu hình, lớp cơ sở dữ liệu và các tiện ích quan trọng khác.


0

Đây thường là vấn đề bạn có muốn tải thư viện máy khách một cách có điều kiện hay tiếp tục và tải nó cho dù bạn có sử dụng nó hay không.

Đây là ví dụ cụ thể; xây dựng trên những gì pcj nói.

Giả sử bạn có tệp cấu hình lưu trữ tên người dùng và mật khẩu cơ sở dữ liệu của bạn (conf.php):

<?php
//my site configuration file

//For Database
$location='localhost';
$dbuser='yourname';
$userpw='yourpassword';
$database='nameofdatabase';
?>

Và một lớp với hàm tĩnh sử dụng cơ sở dữ liệu:

<?php
class UsedInLoop {
    public static function databaseQuery(){
        require(/path/to/conf.php);                //require_once will not work here
        $db = new mysqli($location, $dbuser, $userpw, $database);
        //yada yada yada
    }
}
?>

Và hàm tĩnh đó được sử dụng bên trong một hàm khác đang được gọi lặp lại bên trong một vòng lặp:

<?php
require_once('path/to/arbitraryObject.php');  //either will likely be OK at this level
$obj = new arbitraryObject();
foreach($array as $element){
    $obj->myFunction();
}
?>

Bạn chỉ có thể yêu cầu / bao gồm các lớp một lần. Nếu bạn yêu cầu / đưa nó vào mỗi lần lặp của vòng lặp, bạn sẽ gặp lỗi. Tuy nhiên, bạn phải bao gồm tệp conf của mình mỗi khi hàm tĩnh được gọi.

<?php
class arbitraryObject {
    public function myFunction(){
        require_once(/path/to/UsedInLoop.php);   //This must be require_once. require() will not work
        UsedInLoop::databaseQuery();
    }
}
?>

Tất nhiên, di chuyển nó ra ngoài chức năng có thể là một giải pháp cho vấn đề đó:

<?php
require(/path/to/UsedInLoop.php);   //now require() is fine   
class arbitraryObject {
    public function myFunction(){
        UsedInLoop::databaseQuery();
    }
}
?>

Trừ khi bạn quan tâm đến chi phí tải một lớp chỉ có thể được sử dụng trong một số điều kiện nhất định và không muốn tải nó khi không có.


-1

requirecó chi phí lớn hơn include, vì nó phải phân tích tệp trước. Thay thế requiresbằng includesthường là một kỹ thuật tối ưu hóa tốt.


2
Tôi biết đó là một nhận xét muộn, nhưng điều này thực sự không đúng. requirekhông phân tích cú pháp tập tin nhiều hơn includekhông. Các _oncephiên bản của các chức năng này đều có một chút chi phí hoạt động, nhưng như những người khác đã nói, nó gần như không đáng kể trong hầu hết các ứng dụng.
ahouse101

-2

Chỉ cần sử dụng yêu cầu và bao gồm.

Bởi vì nghĩ làm thế nào để làm việc với include_once hoặc allow_once. Đó là tìm kiếm dữ liệu nhật ký lưu các tệp PHP được yêu cầu. Vì vậy, đó là chậm hơn bao gồm và yêu cầu.

if (!defined(php)) {
    include 'php';
    define(php, 1);
}

Chỉ cần sử dụng như thế này ...

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.