题 require,include,require_once和include_once之间的区别?


在PHP中:

  • 我应该什么时候使用 require 与 include
  • 我应该什么时候使用 require_once 与 include_once

965
2018-03-10 16:13


起源


顺便问一下 include_once : php.net/manual/en/function.include-once.php - Felix Kling
PHP CodeSniffer说,如果有条件地包含文件,请使用include_once(而不是require_once)。 - Farhad
stackoverflow.com/a/3633905/1045444 - Somnath Muluk


答案:


require 和 include_once 同样。

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

  1. 我应该什么时候使用 require 与 include
  2. 我应该什么时候使用 require_once 与 require

描述了答案1 这里

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

可以找到2的答案 这里

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


1174
2018-03-10 16:17



请注意,require()的执行速度比require_once()快,所以如果你确定没有重复的包含,请使用require()。 - dialex
@DiAlex,require_once较慢,但几乎无法测量。 - Prof. Falken
@DiAlex ......如果事实证明该文件已经包含在内,那么 require_once()将是两者中更快的 - Tom
@Prof.Falken在什么情况下需要不止一次需要同一个文件?在我目前的思维模式中,我无法想到一个。 - Weishi Zeng
@WeishiZeng对于网页,可能存在您想要多次包含的HTML片段。 - James Beninger


使用

  • 要求
    当文件是 需要 根据您的申请,例如一个重要的消息模板或包含配置变量的文件,应用程序不会破坏它们。

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

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

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

但基本上,由你来决定何时使用哪个。


328
2018-03-10 16:25



我有一个PDO连接 (到数据库)。我应该使用哪一个? include? include_once? require? require_once? - Shafizadeh
这应该是接受的答案,因为它简短地回答了问题,并链接到官方手册,而不是仅链接w3schools的其他答案。 - DanFromGermany
给我一个理由,如果没有必要,你会包括它吗? - Francisco Ochoa
我正在使用一个通用页面布局的模板,其中包含标题,列,页脚等部分。这允许我为网站上的每个页面提供该模板,我只需要在页面文件夹结构中创建文件来定义什么应该进入每个职位。如果我确定页面不需要侧边栏我只是将该文件留在该页面的文件夹中,并且模板仍然可以正常运行而不存在该文件。 - James Coyle


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

运用 require 要么 include 相反意味着您的代码不能在其他地方重复使用,即您实际提取的脚本 执行 代码而不是制作 可得到 一个类或一些函数库。

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

如果您已经在进行OO或函数式编程,请使用 include_once 主要是 迟滞 在堆栈中你发现错误/错误。你想知道这个功能吗? do_cool_stuff() 你以后去打电话时不可用,或者 你期望它可用的那一刻 通过要求图书馆?一般来说,最好立即知道您需要和期望的东西是否可用,所以只需使用即可 require_once

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


269
2018-03-10 16:46



+1这应该是接受的答案。关键点是 include 家庭通常是一个彻头彻尾的坏主意(因为包含任何可能不存在的文件很少见),而且 require_once 和 require,你应该使用 require_once 当包含文件时 确定 要在别处使用的函数或类,或实例化单例如数据库连接对象,并使用 require 用于包含立即的文件 做东西 当他们被包括在内在任何大型Web应用程序中,后一种包含都是不寻常的。 - Mark Amery
+1(有另一个金徽章;))明智地同意 require_once 很可能是几乎所有时间都使用的候选人。鉴于选择之间的微小开销差异, require 确保脚本停止,我想不出很多场景,如果没有包含文件,应用程序可以存活。和 _once 防止欺骗问题。任何不同意的人都可能知道他们在做什么,所以可以选择适合应用程序或场景的人。 - James
嘿我有一个文件,有时包含在索引页面和直接调用的人工时间(home.php)...........现在我已经在索引页面上包含配置文件与require函数现在我可以使用require_once在home.php中防止重新包含 - Ravinder Payal
@RavinderPayal好吧,我的第一个建议就是通过使用前端控制器让自己头疼!仅仅因为用户调用example.com/home并不意味着你应该有一个完全独立的home.php!相反/ home /应该只通过index.php或front.php的前端控制器。只有php真的允许oldschool“每页一个脚本”的方法,并相信我,这不是最好的方式。但是如果你必须有一个单独的home.php和index.php,那么任何可能同时存在的东西都应该在库文件或模板中,.. / template / home.tpl或../view/home.view.php你懂? - Kzqai
它的SNS和我最初选择一个文件一页的方法,以便于开发和一大堆文件,我无法重新创建,现在我解决了这个问题,另一个原因是一页一页文件的速度和与硬盘的接触较少减少包括的数量 - Ravinder Payal


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

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


26
2018-03-10 16:18





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

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

include_once() 和 require_once() 如果文件已被包含,则第二次不包含该文件。

请参阅以下文档页面:


25
2017-11-03 11:48





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

<?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将包含文件一次但停止进一步执行。


18
2017-09-29 09:42



'比建议更好的例子' - Ramesh Kithsiri HettiArachchi


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

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


16
2018-03-10 17:08





不同之处在于命令生成的错误。同 require,您想要使用的文件确实是必需的,因此生成一个 E_ERROR 如果没有找到。

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

include 只生成一个 E_WARNING 错误,如果它失败,或多或少是沉默的。

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


对于 *_once()

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

同样适用于 require_once() 当然。


参考: require()include_once()


11
2018-03-10 16:20



require 给出E_COMPILE_ERROR,而不是E_ERROR。 - Yousha Aleayoub
看起来它在过去7年中发生了变化。 - Felix Kling