PHP中“include_once”和“require_once”的区别是什么?

31

在PHP中,“include_once”和“require_once”的区别是什么?

include_once "connect_to_mysql.php";

require_once "connect_to_mysql.php";

这些有什么区别吗?


1
https://dev59.com/aHE95IYBdhLWcg3wMa91 - Dmytro Dzyubak
4个回答

53

如果文件缺失,使用include将使脚本继续运行(并发出警告)。

如果文件缺失,使用require将导致脚本崩溃。

如果您在使用include处理100%可选内容,则include仍然有效,而require将会崩溃。

如果您包含了认为是可选的某些内容,但是您脚本的其他部分后面可能需要用到它,那么您的脚本将在那里崩溃,您可能完全不知道原因。

这不是编写程序的好方法。

否则,这两者之间没有区别。

编辑

通常情况下,选择使用includerequire应该没有什么影响,有95%的情况下都是如此。

因此,您应该坚持使用require(或require_once),以告诉您需要的文件是否丢失。

当在一个文件中包含另一个文件时,再在另一个文件中包含另一个文件,如果顶部的一个include丢失,会产生很难跟踪的漏洞。

有些人喜欢使用include,因为他们想要使用该“功能”。

Douglas Crockford是一位JavaScript / Java / C++开发人员,而不是PHP,但他建议应该避免那些看起来像漏洞或无法与漏洞区分的副作用。

请注意,如果您的整个项目完全基于类(或函数)并且完全模块化,则除了在应用程序初始化时重置配置对象上的值(包括管理员覆盖选项或开发调试选项),没有太多使用include的必要,对象已经被require过了。

正如您可能猜到的那样,还有其他方法可以实现此目的。

这些只是建议,但是这些建议来自比我更聪明,在数十种语言中拥有数十年经验的人们。


4
这并没有回答问题 - "require_once()"和"include_once()"之间有什么区别? - Amal Murali
1
那么,编写Include或Require的最佳方式是什么?@Norguard - FarwallGhost
4
@AmalMurali 的回答即为:include 会继续执行并发出警告,而 require 则会因资源丢失而立即停止执行。也许你可以再读一遍前两个语句。此外,他没有询问 includeinclude_once 之间的差异,因此在本次讨论中,“include” 和 “require”的整个差异都适用。约定优于配置。 - Norguard
@FarwallGhost:请查看这个答案 - Amal Murali
它没有回答这个问题。 - Sam

22

include_once会产生一个警告,但不会阻止PHP执行脚本的其他部分。

require_once会产生一个错误,并且会停止PHP执行脚本的其他部分。


好的简短解释。 - Snowbases

6

0

页面停止执行 require_once 无法加载所需文件,而另一方面 include_once 将继续加载包括文件而不会产生错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接