require,include和require_once之间的区别?

在PHP中:

  • 什么时候应该使用requireinclude
  • 什么时候应该使用require_oncerequire

还有requireinclude_once

所以你的问题应该是…

  1. 什么时候应该使用requireinclude
  2. 什么时候应该使用require_oncerequire

这里介绍1的答案。

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

2的答案可以在这里find。

require_once()语句与require()完全相同,除了PHP将检查文件是否已被包含,如果包含,则不包括(需要)。

使用

  • 要求
    当应用程序需要文件时,例如重要的消息模板或包含configurationvariables的文件,否则应用程序将会中断。

  • require_once
    当文件中包含会导致后续包含错误的内容时,例如function important() { /* important code */}在您的应用程序中是绝对需要的,但是由于函数不能被重新声明,所以不应该再次包含。

  • 包括文件不需要时,应用程序stream程应该继续时,没有find,例如
    非常适合于引用当前范围的variables的模板

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

但基本上,这取决于你什么时候使用哪个。

我的build议是只用99.9%的时间require_once

使用requireinclude意味着你的代码在其他地方是不可重用的,也就是说你正在执行的脚本实际上是执行代码而不是提供一个类或一些函数库。

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

如果你已经在做OO或者函数式的编程,那么使用include_once大多会延迟你在堆栈中发现错误/错误的地方。 你是否想知道函数do_cool_stuff()在稍后调用的时候是不可用的,或者你期望它可以通过do_cool_stuff()函数do_cool_stuff()来使用函数do_cool_stuff()吗? 一般来说,最好立即知道是否需要和期望的东西不可用,所以只需使用require_once

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

_once函数和没有_once函数之间的区别:没有_once代码将被再次包含,而_once函数PHP跟踪包含的文件,并将只包含一次。

require和include之间的区别:如果没有find需要的文件,PHP将发出一个致命错误,而对于include,只会发出警告。

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

require()会抛出一个E_COMPILE_ERROR ,如果脚本不能包含这个文件,就会暂停脚本。

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

请参阅以下文档页面:

  • 包括
  • 要求
  • include_once
  • require_once

无论何时使用require_once()只要在当前文件中只需要一次调用文件,就可以在一个文件中使用另一个文件。 在这个例子中,我有一个test1.php。

 <?php echo "today is:".date("Ymd"); ?> 

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

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

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

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

 <?php echo "today is:".date("Ymd"); ?> 

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

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

当你正在观看包括test3文件在内的m个文件时,将会包含该文件,但会暂停执行。

使用“包含”可重复使用的PHP模板。 对所需的库使用“require”。

“* _once”很好,因为它检查文件是否已经加载,但是在“require_once”中只对我有意义。

区别在于命令生成的错误。 有了require ,你想要使用的文件是非常必要的,因此如果找不到E_ERROR就会生成。

require()include() require()是一样的,除了失败之外,它也会产生一个致命的E_ERROR级别的错误。

如果失败,只会生成一个E_WARNING错误,或多或less是无声的。

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


对于*_once()

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

当然也适用于require_once()


参考: require()include_once()

如果不存在则需要文件存在,否则会显示错误; 而包含 – 如果文件不存在然后页面将继续加载。

要求关键部分,如授权,包括所有其他人。

多个包括只是非常糟糕的devise,一定要避免。 所以,* _once并不重要。

包括 / 要求您也可以多次包含同一个文件:

require()和include()是一样的,除了失败之外,它也会产生一个致命的E_COMPILE_ERROR级错误。 换句话说,它会停止脚本,而include()只发出一个警告(E_WARNING),允许脚本继续。

require_once / include_once

和include / require是一样的,除非PHP会检查文件是否已经被包含,如果是的话,不包括(需要)它。

你应该把类和函数定义保存在文件中。

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

使用require来加载模板文件。

包括()

它包含一个指定的文件。 如果找不到文件并执行剩余的脚本,将会发出警告

要求()

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

include_once()的

它包含一个指定的文件。 一个文件已经包含在内,不会再被包含。 如果找不到文件并执行剩余的脚本,将会发出警告。

require_once()

它包含一个指定的文件。 一个文件已经包含在内,不会再被包含。 如果找不到文件并停止执行,会产生一个致命错误。

从手册 :

require()include() require()是一样的,除了失败之外,它也会产生一个致命的E_COMPILE_ERROR级错误。 换句话说,它会停止脚本,而include()只发出一个警告( E_WARNING ),允许脚本继续。

_once()variables也是如此。

include()会在没有find文件时产生警告,但是require_once()会产生一个致命错误。

另一件事是如果之前包含文件。 那么require_once()将不会再包含它。

我使用的function如下:

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

在xyz.php中声明了不变的值。

我必须从其他的PHP脚本文件调用这个doSomething()函数。

但是我在一个循环中调用这个函数的时候观察到了行为,第一次迭代doSomething()在xyz.php获得了常量值,但是后来每次迭代doSomething()都不能获得在xyz.php声明的常量值。

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

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

现在,每次迭代调用doSomething()都会获取xyz.php定义的常量值。

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

包括只会产生一个警告(E_WARNING)和脚本将继续

require_once语句可以用来在另外一个php文件中包含一个php文件,当你可能需要多次包含被调用的文件的时候。

如果a.php是一个用require_once()语句调用b.php的php脚本,并且没有findb.php,则a.php停止执行,导致致命错误。

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

  2. 当你想加载模板样式的文件时使用include函数

如果你仍然感到困惑,那么只需要使用require_once

  1. 当应该使用require还是include

Requireinclude函数执行相同的任务,即包含和评估指定的文件,但是不同之处在于当指定的文件位置无效或者include会产生警告并继续代码执行的任何错误时会导致严重错误。

所以当你试图包含的文件是系统核心并且可能对代码的其余部分造成巨大的影响时,你可以使用require函数,当你试图包含的文件是一个包含一些较不重要代码的简单文件。

而我个人的build议(对于不太重要的代码)是在代码处于开发阶段的时候去处理require函数,这样你就可以debugging代码,以后再用include函数replace所有require函数,这样在if你会错过任何错误,它不会影响最终用户和其他代码执行正确…

  1. 当应该使用require_once还是require

requirerequire_once之间的基本区别是require_once会检查文件是否已经被包含,如果已经包含,那么它将不包括文件,其中require函数将包括文件,而不pipe文件是否已经包含

所以在你想要包含一些代码的情况下一次又一次地使用require函数,就好像你想在你的代码中只包含一些代码一样require_once

PSR-0 / PSR-4自动加载器的时代,如果你所需要的只是为你的代码提供一些函数/类,那么使用这些语句可能完全没有必要(当然,你仍然需要在你的代码中使用require_once自动加载器引导文件和include模板,如果你仍然使用PHP作为模板引擎)。

要求比include更大的开销,因为它必须先parsing文件。 用includes来代替需求通常是一个很好的优化技术。

基本上,如果你需要一个错误的path,PHP会抛出一个致命的错误,并调用关机function,但是当你包含一个错误的path,PHP将继续执行,但只会显示一个警告,该文件不存在。

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

根据我的经验,需要重要的文件,如configuration文件,数据库类和其他重要的工具是很常见的

2018! 回答

这个问题在7年前被问过,没有任何答案能为这个问题提供实际的帮助。 在现代PHP编程中,主要只使用required_once来包含autoloader类(经常使用composer autoloader),它将加载所有的类和函数(函数文件需要明确添加到composer.json文件中以便在其他所有类中使用)文件)。 如果由于某种原因你的类不能从自动加载器加载,你可以使用require_once加载它。

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

 // arr.php return ['x'=>'y]; //main.php $arr= require 'arry.php' 

如果您打算使用的文件包含可执行文件或声明某些variables,则几乎所有的时间都需要用户require因为如果在另一个地方使用require_one ,则代码将不会被执行,并且/或者您的variables不会默默启动,导致绝对难以查明。

includeinclude_once确实没有实际的用例。

只是使用require和include。 导致如何工作include_once或require_once查找保存包含或需要的php文件的日志数据。 所以,这比包含n要慢。

 <pre> if(!defined(php)){ include 'php'; define(php,1); } </pre> 

就这样使用

Interesting Posts