关于php:require,include,require_once和include_once之间的区别?

Difference between require, include, require_once and include_once?

在PHP中:

  • 我什么时候应该使用requireinclude
  • 我什么时候应该使用require_onceinclude_once


还有requireinclude_once

所以你的问题应该是…

  • 我什么时候应该使用requireinclude
  • 我应该什么时候使用require_oncerequire
  • 这里描述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.


    使用

    • 要求当应用程序需要该文件时,例如重要的消息模板或包含配置变量的文件,如果没有配置变量,应用程序将中断。

    • 要求一次当文件包含的内容在随后包含时会产生错误时,例如您的应用程序中肯定需要function important() { /* important code */},但由于不能重新声明函数,因此不应再次包括在内。

    • 包括当不需要该文件时,应用程序流应在未找到时继续,例如对于引用当前范围或其他内容中的变量的模板非常有用

    • 包含一次可选依赖项,在后续加载时可能会产生错误,或者由于HTTP开销,可能不希望发生两次远程文件包含。

    但基本上,这取决于你何时使用它。


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

    相反,使用requireinclude意味着代码在其他地方是不可重用的,也就是说,您拉入的脚本实际上执行代码,而不是提供类或某些函数库。

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

    如果您已经在进行OO或函数式编程,那么使用include_once通常会延迟堆栈中发现错误/错误的位置。您想知道,当您稍后调用函数do_cool_stuff()时,或者当您希望通过请求库获得该函数时,该函数不可用吗?一般来说,最好立即知道您需要和期望的东西是否不可用,所以只需使用require_once

    或者,在现代OOP中,只需在使用时自动加载类。


    一次性功能与不一次性功能的区别:没有一次代码将再次包含,而有了一次函数,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()


    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,则不会执行代码和/或不会静默启动变量,从而导致非常难以确定的错误。

    对于includeinclude_once,没有实际的使用案例。


    你应该把类的函数定义中的有组织的文件。

    负载限制使用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应该使用?

    requireinclude函数相同的任务,即在指定的文件包括与evaluates require差,但会造成致命的错误是当指定的位置是无效的任何文件或错误而产生include将预警和继续执行代码。

    你可以使用操作系统中的功能的情况下,require文件你想有是心的系统和可能造成巨大的影响和其他的代码,你可以使用该函数的文件include当你想包括一些简单的文件是一种重要的无码。

    我个人推荐(不重要的)的代码)是无处不在的require函数在你的代码,它是这样一个发展中的CAN调试你的代码相requirereplace函数和在线全由include功能在移动它,如果你错过任何生产这样的错误不影响它将结束。用户代码的executes和恰当的休息……

  • 当一个或requirerequire_once应该使用?

    之间的差异的基础requirerequire_oncerequire_once将检查是否一个文件已经包含或不包含它,如果它已经在当时的文件而不会包括在require功能将包括一个文件的文件,不论是否已列入或没有。

    操作系统中的情况下,你想有一些代码块再次和再次使用require函数,而如果你想包括一些代码只有一次在你的代码,使用require_once


  • 当你需要使用require函数的负载的任何类,函数或依赖。

  • 当你想使用include函数加载模板文件设计

  • 如果你仍然混淆使用,只需要一次_所有的时间。


    它们都是包含文件的方法。

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

    实例:

    1
    2
    3
    Require 'filename'
    Require_once 'filename'
    Include 'filename'

    还有一个include-once函数,其中包含一个文件。

    1
    Include_once 'filename'

    在我用手机打字的地方,不要用大写字母。


    我注意到一件事,当使用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是通常与良好的优化技术。


    只是使用需要和包括。

    因为想想如何使用include_一次或require_一次。这是在寻找保存包含或需要的PHP文件的日志数据。所以这比包含和需要要慢。

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

    就像这样…