提问



在PHP中:



  • 我应该何时使用requireinclude?

  • 我应该何时使用require_onceinclude_once?


最佳参考


还有requireinclude_once


所以你的问题应该是......



  1. 我应该何时使用requireinclude?

  2. 我应该何时使用require_oncerequire



这里描述了答案1. [98]



  require()函数与include()相同,只是它以不同方式处理错误。如果发生错误,include()函数会生成警告,但脚本将继续执行。 require()生成致命错误,脚本将停止。



2的答案可以在这里找到。[99]



  require_once()语句与require()相同,但PHP将检查文件是否已被包含,如果已包含,则不再包括(require)它。


其它参考1


使用



  • 需要,点击
    当您的应用程序文件 required 时,例如一个重要的消息模板或包含配置变量的文件,应用程序将不会破坏它们。[100]

  • require_once结果
    当文件包含在后续包含时会产生错误的内容,例如
    function important() { /* important code */}在你的申请中肯定是需要的,但由于不能重新申报功能,所以不应再包括在内。[101]

  • 包括
    当不需要文件时,应用程序流程应在未找到时继续,例如

    非常适用于引用当前范围或某些变量的模板[102]

  • include_once结果
    可选的依赖项会在后续加载时产生错误,或者由于HTTP开销而不希望发生两次远程文件包含[103]



但基本上,由你决定何时使用它。

其它参考2


我的建议是只使用require_once 99.9%的时间。


使用requireinclude代替意味着您的代码不能在其他地方重复使用,即您实际上执行代码而非使可用的脚本一个类或一些函数库。


如果您需要/包括在现场执行的代码,那是程序代码,您需要了解新的范例。就像面向对象编程,基于函数的编程或函数式编程一样。


如果您已经在进行OO或函数式编程,那么使用include_once主要是延迟在堆栈中你会发现错误/错误。你想知道函数[[当你以后打电话给你时,或者你期望它可用的时刻,你可以通过要求图书馆吗?通常情况下,最好立即知道你需要什么并且期望不可用,所以只需使用require_once


或者,在现代OOP中,只需在使用时自动加载您的课程。[104]

其它参考3


_once函数与没有_once函数之间的区别:
没有_once代码将被再次包括在内,而使用_once函数,PHP会跟踪包含的文件,并且只包含一次。


require和include之间的区别:
如果找不到所需的文件,PHP将发出致命错误,而对于include,仅发出警告。

其它参考4


如果它不能包含文件,include()将发出警告,但脚本的其余部分将运行。


require()将抛出E_COMPILE_ERROR并停止脚本,如果它不能包含该文件。


如果已经包含该文件,include_once()require_once()函数将不再包含该文件。


请参阅以下文档页面:



  • 包括

  • 需要

  • include_once

  • require_once


其它参考5


无论何时使用require_once(),当您在当前文件中只需要一次调用时,可以在文件中使用包含另一个文件。
在这个例子中,我有一个test1.php。[105] [106] [107] [108]


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


在另一个我命名为test2.php的文件中


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


因为你正在观看需要test1文件两次的m,但文件将包含test1一次,而在第二次调用时,这将被忽略。没有停止会一次显示输出。


无论何时使用include_once(),当您在当前文件中多次需要被调用文件时,可以在文件中使用`来包含另一个文件。
在这个示例中,我有一个名为test3.php的文件。


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


在另一个我命名为test4.php的文件中


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


当你正在观看包含test3文件的m将包含文件一次但停止进一步执行。

其它参考6


使用include表示可重用的PHP模板。对所需的库使用require。[109]


* _once很好,因为它检查文件是否已经加载,但它只对我有用require_once。

其它参考7


不同之处在于命令生成的错误。使用require,您确实需要使用的文件,因此如果找不到则会生成E_ERROR



  require()include()相同,除非失败,它也会产生致命E_ERROR级错误。



include只会在失败时产生E_WARNING错误,这个错误或多或少是无声的。


因此,如果需要该文件使剩余代码工作并且您希望脚本失败,则使用它,该文件不可用。





对于*_once():



  include_once()可用于在特定执行脚本期间可能包含和评估多个文件的情况,因此在这种情况下,它可以帮助避免诸如函数重定义,变量值重新分配等问题。



当然,require_once()同样适用。





参考:require()include_once() [110] [111]

其它参考8


使用require文件必须存在,如果它不会显示错误;而使用include - 如果文件不存在则则页面将继续加载。

其它参考9


需要关键部件,如授权,包括所有其他部件。


多个包含只是非常糟糕的设计,必须要避免。所以,* _once并不重要。

其它参考10


require 会产生致命错误(E_COMPILE_ERROR)并停止脚本。


include 只会产生警告(E_WARNING),脚本将继续。


当您可能需要多次包含被调用文件时, require_once 语句可用于在另一个中包含PHP文件。


如果a.php是一个PHP脚本,使用require_once()语句调用b.php,并且找不到b.php,则a.php会停止执行,从而导致致命错误。

其它参考11


包含/要求您可以多次包含同一文件:[112] [113]



  require()与include()相同,除非失败,它还会产生致命的E_COMPILE_ERROR级别错误。换句话说,它将暂停脚本,而include()仅发出警告(E_WARNING),允许脚本继续。



require_once/include_once [114] [115]



  与include/require相同,但PHP将检查文件是否已被包含,如果已包含,则不再包括(require)它。


其它参考12


您应该将类​​和函数定义保存在文件中。


使用require_once加载依赖项(类,函数,常量)。


使用require加载类似模板的文件。

其它参考13


包括()


它包含指定的文件。
如果找不到文件并执行剩余的脚本,它将产生警告


要求()


它包含指定的文件。
如果找不到文件并停止执行,它将产生致命错误


include_once()的


它包含指定的文件。
已包含文件,将不再包含该文件。
如果找不到文件并执行剩余的脚本,它将产生一个警告。


require_once()


它包含指定的文件。
已包含文件,将不再包含该文件。
如果找不到文件并停止执行,它将产生致命错误。

其它参考14


从手册:[116]



  require()include()相同,除非失败,它也会产生致命E_COMPILE_ERROR级错误。换句话说,它将暂停脚本,而include()仅发出警告(E_WARNING),允许脚本继续。



_once()变体也是如此。

其它参考15


include()会在找不到文件时生成警告,但require_once()会产生致命错误。


另一件事是如果之前包含文件。然后require_once()将不再包括它。

其它参考16


我使用的功能如下:


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


在xyz.php中声明了常量值。


我必须从另一个PHP脚本文件中调用这个doSomething()函数。


但是我在循环中调用此函数时观察到了行为,对于第一次迭代,doSomething()在xyz.php中获得了常量值,但后来每次迭代doSomething()都无法获得doSomething()中声明的常量值。 56]]。


我通过从require_once()切换到include()解决了我的问题,更新doSomething()代码如下:


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


现在每次对doSomething()的迭代调用都会得到xyz.php中定义的常量值。

其它参考17


2018年7年后的答案



这个问题是七年前提出的,没有一个答案能为这个问题提供实际帮助。在现代PHP编程中,你主要只使用required_once一次来包含你的自动加载器类(经常是作曲家自动加载器),它会加载你所有的类和函数(函数文件需要显式添加到composer.json文件在所有其他文件中可用)。如果由于任何原因您的类无法从自动加载器加载,您可以使用require_once加载它。


这些天你只使用require拆分一大块PHP文件。这主要是一个大数组定义。在这种情况下,您只使用require而不是require_once


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

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


如果您打算使用的文件包含可执行文件或声明某些变量,您几乎所有时间都需要使用require,因为如果您在其他地方使用require_once,您的代码将不会被执行和/或您的变量不会以静默方式启动,导致绝对难以查明的错误。


includeinclude_once确实没有实际用例。

其它参考18


PSR-0 / PSR-4自动加载器的时代,如果您只需要为代码提供一些函数/类,则完全没有必要使用任何语句(当然您仍然需要require_once自动加载器本身在你的bootstrap文件和include模板中,如果你仍然使用PHP作为模板引擎)。

其它参考19



  1. 当您需要加载任何类,函数或依赖项时,请使用 require 函数。

  2. 如果要加载模板样式文件,请使用 include 功能



如果您仍然感到困惑,请一直使用 require_once

其它参考20


&NBSP;



  1. 什么时候应该使用requireinclude?


    requireinclude函数执行相同的任务,即包含和评估指定的文件,但差异为require将导致指定文件位置无效或任何致命错误错误,而include将生成警告并继续执行代码。


    因此,如果您尝试包含的文件是系统的核心,您可以使用require功能,并且可能会对其余代码造成巨大影响,您可以使用当您尝试包含的文件是包含一些不太重要的代码的简单文件时,include函数。


    我的个人建议(对于不太重要的代码)是在代码中的任何地方使用require函数,而它处于开发阶段,这样您就可以调试代码,然后通过[[替换所有require函数来替换require函数。 include函数在将其转移到生产之前,如果你错过任何错误,它将不会影响最终用户,其余代码正确执行...

  2. 何时应该使用require_oncerequire?


    requirerequire_once之间的基本区别是require_once将检查文件是否已经包含(如果已经包含),那么它不会包括文件而require无论文件是否已包含在内,函数都将包含该文件。


    因此,如果您想要一次又一次地包含一些代码,请使用require函数,而如果您想在代码中只包含一些代码,请使用require_once


其它参考21


它们都是包含文件的方式:


需要意味着它需要它。 Require_once意味着它需要它,但只需要它一次。包含意味着它将包含一个文件,但不需要它继续。


例子:


需要文件名
Require_oncefilename
包含文件名


还有一个include_once函数,它包含一次文件。


Include_oncefilename


当我从手机输入时,请不要使用大写字母。


感谢您的时间。

其它参考22


基本上,如果你需要一个错误的路径,PHP会抛出一个致命错误并调用shutdown函数,但是当你包含一个错误的路径时,PHP会继续执行,但它只会显示一个警告,指出该文件不存在。


从英文单词 require ,PHP被告知页面或文件的执行取决于所需的文件。


根据我的经验,需要重要的文件,如配置文件,数据库类和其他重要的实用程序是常态。

其它参考23


前几天我被问到PHP中include和require之间的区别是什么。它们似乎功能相同,但存在显着差异。


首先,既不包含也不要求是函数,它们是构造。因此没有必要使用括号(file.php)等括号来调用它们;相反,它更喜欢使用includefile.php。


当无法找到包含的文件时,include和require之间出现差异:include将发出警告(E_WARNING)并且脚本将继续,而require将发出致命错误(E_COMPILE_ERROR)并停止脚本。如果包含的文件对于正确运行的脚本的其余部分至关重要,那么您需要使用require。


您应该在开发过程中拾取require抛出的任何致命错误,并在将脚本发布到野外之前解决它们;但是,如果不是直截了当,你可能会考虑使用include来制定计划B: -


<?php
if (@include 'file.php') {
    // Plan A
} else {
    // Plan B - for when 'file.php' cannot be included
}


在这个示例中,include用于获取'file.php',但如果失败,我们使用@来抑制警告并执行一些替代代码。如果找不到文件,include将返回false。


include_once和require_once分别表现得像include和require,除非它们只包含文件(如果尚未包含)。否则,他们会抛出同样的错误。

其它参考24


require的开销大于include,因为它必须先解析文件。用includes替换requires通常是一种很好的优化技术。

其它参考25


只需使用require和include。


因为想想如何使用include_once或require_once。
那就是寻找保存包含或需要的PHP文件的日志数据。
所以这比include和require慢。


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


就这样使用......