在PHP中:
- 我什么时候应该使用require和include?
- 我什么时候应该使用require_once和include_once?
- 的BTW:所以有include_oncenet /手动/恩/ function.include-once.php
- PHP codesniffer说,如果文件是包括使用条件,包括_(require once once不是_)。
- stackoverflow.com 1045444 3633905 / / /
还有require和include_once。
所以你的问题应该是…
我什么时候应该使用require和include?
我应该什么时候使用require_once和require
这里描述1的答案。
The require() function is identical to include(), except that it handles errors differently. If an error occurs, the include() function generates a warning, but the script will continue execution. The require() generates a fatal error, and the script will stop.
这里可以找到2的答案。
The require_once() statement is identical to require() except PHP will check if the file has already been included, and if so, not include (require) it again.
- 请注意,require()的执行速度比require ounce()快,因此如果您确定没有重复的includes,请使用require()。
- @dialex,需要一次速度较慢,但几乎无法测量。
- @dialex…而且,如果事实上文件已经包括在内,那么require_once()将是两者中更快的一个。
- @Falken教授,在什么情况下需要一个文件多次需要相同的文件?我想不出一个在我现在的思维定势中。
- @魏师增,我以前也没想到任何原因…但是,当您询问时,如果所需的代码不仅定义了函数和常量,而且还执行了代码,该怎么办?但这不是一个好的编程实践。
- @法尔肯教授,这可能是一个案例,对吧?但还有其他的主要原因让它变得有意义。
- 也许文件required也是包含/需要的另一个文件required?
- 在大型代码库中,可以在多个位置要求/包含配置文件,以供测试或重用。一旦你想避免它咬你的屁股,就用它。
- …这让人不禁要问,为什么给定php的长度以使许多其他事情自动进行,它不只是使用一次性行为作为其默认值。
- 不把同一个文件放两次怎么样?include()函数将在包含相同文件两次时发出警告。
- 要求/包括和要求一次/包括的原因是提供"性能多样性"。如果只存在"需求一次",那么使用[可能]更快的"需求"的选择将不存在。关于"何时需要一次以上?",考虑一个涉及多个团队的大规模开发工作。很难保持协调。"需要一次"的能力消除了物流噩梦中的一种复杂性。在这种环境中工作过的任何人都知道编码标准符合性的级别;)。
- @对于网页,可能有HTML代码片段需要包含多次。
- 关于:使用vs包括vs需要。何时使用更好:使用即时需求?
- @Jamesbeninger…因为让我们记住PHP是(曾经是?)毕竟是一种模板语言。现在,在大多数情况下,不应该使用require/include来执行代码或作为模板块(goosebumps)
- @魏世增,请看我的答案。
- @Reverseemf我参加聚会迟到了,但我在一些包含的(或必需的文件)中有PHP代码。当我"需要一次"或"包含一次"时,前一个"单击"的结果似乎保持不变,例如,如果我在一个字段中键入"56.49"并弹出一个错误弹出窗口(例如,因为该金额大于最大金额),然后我将该字段更改为"55.00",则代码中仍会显示"56.49"。我可以在控制台看到它。是否可能是"要求一次"导致了这种情况,或者我应该在其他地方寻找。还没有找到。
使用
要求当应用程序需要该文件时,例如重要的消息模板或包含配置变量的文件,如果没有配置变量,应用程序将中断。
要求一次当文件包含的内容在随后包含时会产生错误时,例如您的应用程序中肯定需要function important() { /* important code */},但由于不能重新声明函数,因此不应再次包括在内。
包括当不需要该文件时,应用程序流应在未找到时继续,例如对于引用当前范围或其他内容中的变量的模板非常有用
包含一次可选依赖项,在后续加载时可能会产生错误,或者由于HTTP开销,可能不希望发生两次远程文件包含。
但基本上,这取决于你何时使用它。
- 我有一个PDO连接(到数据库)。我应该用哪一个?EDOCX1?4?EDOCX1?5?EDOCX1?1?EDOCX1?7?
- 这应该是公认的答案,因为它简短地回答了问题,并链接到了官方手册,而不是只链接W3学校的其他答案。
- 给我一个理由,如果不需要的话,你为什么要包括它?
- 我正在使用一个模板来创建一个普通的页面布局,该页面布局包含标题、列、页脚等节。这允许我为网站上的每个页面提供该模板,并且我只需要在页面文件夹结构中创建文件,定义应该进入这些位置的内容。如果我决定一个页面不需要侧边栏,我只需将该文件留在该页面的文件夹中,模板在没有该文件的情况下仍然可以正常工作。
我的建议是只使用99.9%的时间。
相反,使用require或include意味着代码在其他地方是不可重用的,也就是说,您拉入的脚本实际上执行代码,而不是提供类或某些函数库。
如果您需要/包括当场执行的代码,那就是过程代码,您需要了解一个新的范例。像面向对象编程、基于函数的编程或函数式编程。
如果您已经在进行OO或函数式编程,那么使用include_once通常会延迟堆栈中发现错误/错误的位置。您想知道,当您稍后调用函数do_cool_stuff()时,或者当您希望通过请求库获得该函数时,该函数不可用吗?一般来说,最好立即知道您需要和期望的东西是否不可用,所以只需使用require_once。
或者,在现代OOP中,只需在使用时自动加载类。
- +1这应该是公认的答案。关键点是,include族通常是一个彻底的坏主意(因为很少包含可能不存在的文件),而且在require_once和require中,在包含定义要在其他地方使用的函数或类的文件或实例化单个文件时,应该使用require_once。与数据库连接对象类似,并使用require来包含文件,这些文件在被包含时会立即执行操作。在任何大型Web应用程序中,后一种包含都是不常见的。
- +1(有另一个金徽章;)同意,明智地说,require_once几乎是所有时间都可以使用的最有可能的候选人。考虑到选项之间的开销差异很小,require确保脚本停止,我想不出许多场景,在这些场景中,应用程序可以在不包含文件的情况下生存。而_once则保护自己不受重复问题的影响。任何不同意的人都可能知道他们在做什么,所以可以选择适合应用程序或场景的方案。
- 嘿,我有一个文件,它有时包含在索引页和人工时间中,直接调用(home.php)………现在我已经在索引页上包含了配置文件和require函数,现在我可以在home.php中使用require ounce来防止重新包含吗?
- @拉文德帕亚尔,我的第一个建议是使用前控制器来减轻你的头痛!仅仅因为用户调用example.com/home并不意味着您应该有一个完全独立的home.php!相反,/home/应该只通过index.php或front.php的前控制器进行路由。只有PHP才真正允许老派的"每页一个脚本"方法,相信我,这不是最好的方法。但是如果您必须有一个单独的home.php和index.php,那么这两个文件中的任何内容都应该在库文件或模板中,../templates/home.tpl或../view/home.view.php中,您知道吗?
- 它的sns和我选择一个文件一页的方法最初是为了便于开发,它的文件堆是我无法重新创建的,现在我解决了这个问题,并且做一个文件一页的另一个原因是速度快,通过减少包含的数量减少与硬盘的接触。
- 我把我的include改成require_once,在我的网站的所有页面上,让我们看看我是否会很快遇到麻烦。
一次性功能与不一次性功能的区别:没有一次代码将再次包含,而有了一次函数,PHP将跟踪包含的文件,并且只包含一次。
要求与包括的区别:如果找不到所需的文件,PHP将发出致命错误,而对于include,则只会发出警告。
它将投掷include()警告如果不包括文件的脚本,但其余的将运行。
require()将掷一E_COMPILE_ERROR和停止,如果它不能在脚本中包括的文件。
在include_once()和require_once()函数将不包括在第二时间,如果文件已经包含它。
下面的文档页面:国有企业
- 包括
- 要求
- 有一次_
- _ require once
使用时,你可以使用在require_once()文件包括一个文件时,你只需要把文件中的单个文件的时间电流。这里有一个例子,在一test1.php。
1 2 3
| <?php
echo"today is:".date("Y-m-d");
?> |
我有一个在另一个文件test2.php介绍
1 2 3 4
| <?php
require_once('test1.php');
require_once('test1.php');
?> |
你看你的‘米test1文件两次,但test1文件将包括在第二次通话时间和ignored这将是。和无halting单将显示输出时间。
使用时,你有一_"()中使用的文件可以包括一个文件时,你需要一次以上的称为文件在当前文件。在这里,我已经在《test3.php文件的例子。
1 2 3
| <?php
echo"today is:".date("Y-m-d");
?> |
我有一个在另一个文件test4.php介绍
1 2 3 4
| <?php
include_once('test3.php');
include_once('test3.php');
?> |
在你看m文件,包括该文件将包括test3单时间可进一步执行的状态。
对可重用的PHP模板使用"include"。对所需的库使用"Require"。
"*Once"很好,因为它检查文件是否已经加载,但在"Require_Once"中它只对我有意义。
不同之处在于命令生成的错误。使用require时,您要使用的文件实际上是必需的,因此如果找不到该文件,将生成E_ERROR。
require() is identical to include() except upon failure it will also produce a fatal E_ERROR level error.
include只有在失败时才会产生E_WARNING错误,这或多或少是无声的。
因此,如果需要该文件才能使其余代码正常工作,并且您希望脚本失败,则使用该文件。
对于*_once():
include_once() may be used in cases where the same file might be included and evaluated more than once during a particular execution of a script, so in this case it may help avoid problems such as function redefinitions, variable value reassignments, etc.
当然,这也适用于require_once()。
参考文献:require()、include_once()。
- require给出了e_编译错误,而不是e_错误。
- 看起来在过去的7年里发生了变化。
2018年7年后的答案
这个问题是七年前提出的,没有一个答案能为这个问题提供实际帮助。在现代PHP编程中,主要使用required_once一次来包含autoloader类(通常使用composer autoloader),它将加载所有类和函数(函数文件需要显式添加到composer.json文件中才能在所有其他文件中使用)。如果出于任何原因,您的类不能从autoloader加载,那么您可以使用require_once来加载它。
现在,您使用require只是为了分割一大块PHP文件。这主要是一个大数组定义。在这种情况下,您只使用require,而不使用require_once。
1 2 3 4 5 6 7
| <?php
// arr.php
return ['x'=>'y'];
<?php
//main.php
$arr= require 'arry.php' |
如果要使用的文件包含可执行文件或声明了一些变量,则几乎所有时候都需要使用require,因为如果在另一个位置使用require_once,则不会执行代码和/或不会静默启动变量,从而导致非常难以确定的错误。
对于include和include_once,没有实际的使用案例。
- +1表示自动装弹机。然而,最后一句话是有争议的。通常,您将使用一个封装在输出缓冲区中的include()来实现模板引擎。
- 而且,考虑到现代文本编辑器和现代PHP,几乎没有人使用require()来分割大文件。
- 在函数内部使用require_once作为phpmailer时,我遇到了同样的问题,我的autoloader定义了代码后面需要的$mail变量,因此忽略了下一个require_once,这使得$mail没有初始化!解决方案是在函数调用之后简单地使用require。
- @HAZ在这些情况下,您不使用require有什么原因吗?
你应该把类的函数定义中的有组织的文件。
负载限制使用require_once()(类,函数,常数)。
使用负载型require()模板文件。
include_once()负载限制(使用可选的类,函数,常数)。
使用负载include()样可选的模板文件。
使用"需要"时,文件必须存在,如果不存在,则会显示错误;使用"包含"时,如果文件不存在,则页面将继续加载。
需要关键部分,如授权,包括所有其他部分。
多重包含是非常糟糕的设计,必须完全避免。所以,有一次并不重要。
你可以使用include/include的文件一次以上的还有:
require() is identical to include() except upon failure it will also produce a fatal E_COMPILE_ERROR level error. In other words, it will halt the script whereas include() only emits a warning (E_WARNING) which allows the script to continue.
一次一次的要求,包括_ _号
is identical to include/require except PHP will check if the file has already been included, and if so, not include (require) it again.
include()将产生警告当它不是require_once()寻找文件,但会产生致命的错误。
另一件事是,如果一个文件包含在。然后,将不包括require_once()一遍。
从手册中:
require() is identical to include() except upon failure it will also produce a fatal E_COMPILE_ERROR level error. In other words, it will halt the script whereas include() only emits a warning (E_WARNING) which allows the script to continue.
对于_once()变体也是如此。
在PSR-0 / PSR-4autoloaders的时代,如果您所需要的只是使一些函数/类可用于代码,那么可能完全不需要使用任何语句(当然,如果您仍然使用php作为模板引擎,那么您仍然需要在引导文件中使用require_onceautoloader本身和include模板)。
我使用的功能如下:
1 2 3 4
| function doSomething() {
require_once(xyz.php);
....
} |
xyz.php中声明了常量值。
我必须从另一个PHP脚本文件调用dosomething()函数。
但是我在循环中调用这个函数时观察到了行为,因为第一次迭代dosomething()在xyz.php中得到了常量值,但是后来每次迭代doSomething()都不能得到xyz.php中声明的常量值。
我通过从require_once()切换到include()解决了我的问题,更新doSomething()代码如下:
1 2 3 4
| function doSomething() {
include(xyz.php);
....
} |
现在,每个对doSomething()的迭代调用都会得到xyz.php中定义的常量值。
 ;
当一个或includerequire应该使用?
在require和include函数相同的任务,即在指定的文件包括与evaluates require差,但会造成致命的错误是当指定的位置是无效的任何文件或错误而产生include将预警和继续执行代码。
你可以使用操作系统中的功能的情况下,require文件你想有是心的系统和可能造成巨大的影响和其他的代码,你可以使用该函数的文件include当你想包括一些简单的文件是一种重要的无码。
我个人推荐(不重要的)的代码)是无处不在的require函数在你的代码,它是这样一个发展中的CAN调试你的代码相requirereplace函数和在线全由include功能在移动它,如果你错过任何生产这样的错误不影响它将结束。用户代码的executes和恰当的休息……
当一个或requirerequire_once应该使用?
之间的差异的基础require和require_once是require_once将检查是否一个文件已经包含或不包含它,如果它已经在当时的文件而不会包括在require功能将包括一个文件的文件,不论是否已列入或没有。
操作系统中的情况下,你想有一些代码块再次和再次使用require函数,而如果你想包括一些代码只有一次在你的代码,使用require_once。
当你需要使用require函数的负载的任何类,函数或依赖。
当你想使用include函数加载模板文件设计
如果你仍然混淆使用,只需要一次_所有的时间。
它们都是包含文件的方法。
需要意味着它需要它。需要一次意味着它将需要它,但只需要一次。include意味着它将包含一个文件,但不需要继续。
实例:
1 2 3
| Require 'filename'
Require_once 'filename'
Include 'filename' |
还有一个include-once函数,其中包含一个文件。
在我用手机打字的地方,不要用大写字母。
我注意到一件事,当使用include时,我只能从包含它的文件访问included files函数。使用Require_Once,我可以在第二个Required_Once文件中运行该函数。
另外:我建议增加
1 2 3 4 5
| if(file_exists($RequiredFile)){
require_once($RequiredFile);
}else{
die('Error: File Does Not Exist');
} |
因为当需要时,一旦杀死页面,它有时会回显网站文件的目录。
基本上,如果您需要一个错误的路径,PHP会抛出一个致命的错误并调用shutdown函数,但是当您包含一个错误的路径时,PHP会继续执行,但它只会显示一个警告,即文件不存在。
从英语单词require开始,PHP被告知页面或文件的执行取决于所需的文件。
根据我的经验,通常需要配置文件、数据库类和其他重要实用程序等重要文件。
有更大的比includerequire开销,因为它已解析的文件到第一。replacing requiresincludes是通常与良好的优化技术。
- 我知道这是一个迟来的评论,但事实并非如此。require和include一样,对文件的解析也不多。这些函数的_once版本都有一点开销,但正如其他版本所说,在大多数应用程序中,开销几乎可以忽略不计。
只是使用需要和包括。
因为想想如何使用include_一次或require_一次。这是在寻找保存包含或需要的PHP文件的日志数据。所以这比包含和需要要慢。
就像这样…