使用 require 或 include 代替意味着您的代码不能在其他地方重复使用,即您实际使用的脚本实际上是代码,而不是提供类或某些函数库 .
如果您需要/包括在现场执行的代码,那是程序代码,您需要 get to know a new paradigm . 像面向对象编程,基于函数的编程或函数编程 .
如果您已经在进行OO或函数式编程,那么使用 include_once 主要是在延迟堆栈中发现错误/错误的位置 . 你想知道以后去打电话时函数 do_cool_stuff() 不可用,或者通过要求图书馆 the moment that you expect it to be available 吗?通常,它可用's best to know immediately if something you need and expect isn',所以只需使用 require_once .
27 回答
包括()
它包含指定的文件 . 如果找不到文件并执行剩余的脚本,它将产生警告
要求()
它包含指定的文件 . 如果找不到文件并停止执行,它将产生致命错误
include_once()的
它包含指定的文件 . 已包含文件,将不再包含该文件 . 如果找不到文件并执行剩余的脚本,它将产生一个警告 .
require_once()
它包含指定的文件 . 已包含文件,将不再包含该文件 . 如果找不到文件并停止执行,它将产生致命错误 .
include()
将在找不到文件时生成警告,但require_once()
将生成致命错误 .另一件事是如果之前包含文件 . 然后
require_once()
将不再包括它 .从manual:
_once()
变体也是如此 .还有
require
和include_once
.所以你的问题应该是......
我应该何时使用
require
与include
?我应该何时使用
require_once
与require
回答1描述here .
2的答案可以找到here .
使用
require
当您的申请需要该文件时,例如一个重要的消息模板或包含配置变量的文件,应用程序不会破坏它们 .
require_once
当文件包含在后续包含时会产生错误的内容,例如
function important() { /* important code */}
在您的应用程序中绝对需要,但由于无法重新声明功能,因此不应再次包含 .include当不需要文件时,应用程序流程应在未找到时继续,例如
适用于引用当前范围或其他变量的模板
include_once
可选的依赖项会在后续加载时产生错误,或者由于HTTP开销而不希望发生两次远程文件包含
但基本上,由你来决定何时使用哪个 .
Include / Require您也可以多次包含同一个文件:
require_once / include_once
您应该将类和函数定义保存在文件中 .
使用require_once加载依赖项(类,函数,常量) .
使用require加载类似模板的文件 .
我的建议是只使用
require_once
99.9%的时间 .使用
require
或include
代替意味着您的代码不能在其他地方重复使用,即您实际使用的脚本实际上是代码,而不是提供类或某些函数库 .如果您需要/包括在现场执行的代码,那是程序代码,您需要 get to know a new paradigm . 像面向对象编程,基于函数的编程或函数编程 .
如果您已经在进行OO或函数式编程,那么使用
include_once
主要是在延迟堆栈中发现错误/错误的位置 . 你想知道以后去打电话时函数do_cool_stuff()
不可用,或者通过要求图书馆 the moment that you expect it to be available 吗?通常,它可用's best to know immediately if something you need and expect isn',所以只需使用require_once
.或者,在现代OOP中,只需autoload您的课程即可使用 .
_once函数与没有_once函数之间的区别:不再使用_once代码,而使用_once函数,PHP会跟踪包含的文件,并且只包含一次 .
require和include之间的区别:如果找不到所需的文件,PHP将发出致命错误,而对于include,只会发出警告 .
如果
include()
无法包含该文件,则会发出警告,但脚本的其余部分将运行 .如果不能包含该文件,
require()
将抛出E_COMPILE_ERROR
并暂停该脚本 .include_once()
和require_once()
函数如果已包含该文件,则不会再次包含该文件 .请参阅以下文档页面:
include
require
include_once
require_once
无论何时使用
require_once()
都可以在文件中使用,当您在当前文件中只需要一次调用时,可以包含另一个文件 . 在这个示例中,我有一个test1.php .在另一个我命名为test2.php的文件中
因为你正在观看需要test1文件两次的m,但文件将包含test1一次,而在第二次调用时,这将被忽略 . 没有停止会一次显示输出 .
无论何时使用'include_once(),当您在当前文件中多次需要被调用文件时,可以在文件中使用`来包含另一个文件 . 在这个示例中,我有一个名为test3.php的文件 .
在另一个我命名为test4.php的文件中
当你正在观看包含test3文件的m将包含文件一次但停止进一步执行 .
使用"include"可重用PHP模板 . 使用"require"表示所需的库 .
“* _once”很好,因为它检查文件是否已经加载,但它只对我有用“require_once” .
不同之处在于命令生成的错误 . 对于
require
,您确实需要使用的文件,因此如果找不到,则会生成E_ERROR
.include
只有在失败时才会生成E_WARNING
错误,这个错误或多或少是无声的 .因此,如果需要文件使剩余的代码工作,请使用它您希望脚本失败该文件不可用 .
对于
*_once()
:同样适用于
require_once()
.参考:require(),include_once()
使用require文件必须存在,如果不存在则会显示错误;而使用include - 如果文件不存在则则页面将继续加载 .
require 将产生致命错误(E_COMPILE_ERROR)并停止脚本 .
include 只会产生警告(E_WARNING),脚本将继续 .
当您可能需要多次包含被调用文件时, require_once 语句可用于在另一个语句中包含PHP文件 .
如果a.php是一个PHP脚本,使用require_once()语句调用b.php,并且找不到b.php,则a.php会停止执行,从而导致致命错误 .
需要关键部件,如授权,包括所有其他部件 .
多个包含只是非常糟糕的设计,必须要避免 . 所以,* _once并不重要 .
2018年7年后的答案
这个问题是七年前提出的,没有一个答案能为这个问题提供实际帮助 . 在现代PHP编程中,你主要使用
required_once
只包含一次自动加载器类(通常是composer autoloader),它会加载你所有的类和函数(函数文件需要显式添加到composer.json
文件中,以便在所有其他文件中可用) ) . 如果由于任何原因您的类无法从自动加载器加载,则使用require_once
加载它 .这些天你只使用
require
来分割一大块PHP文件 . 这主要是一个大数组定义 . 在这种情况下,您只使用require
而不是require_once
.如果您打算使用的文件包含可执行文件或声明某些变量,您几乎所有时间都需要使用_600664,因为如果您在其他地方使用_600665,您的代码将无法执行和/或您的变量将无法以静默方式启动,从而导致错误这是绝对难以确定的 .
include
和include_once
确实没有实际用例 .我使用的功能如下:
在xyz.php中声明了常量值 .
我必须从另一个PHP脚本文件中调用这个doSomething()函数 .
但是我在循环中调用此函数时观察到了行为,对于第一次迭代,doSomething()在
xyz.php
内获得了常量值,但是后来每次迭代doSomething()
都无法获得xyz.php
中声明的常量值 .我通过从
require_once()
切换到include()
解决了我的问题,更新doSomething()
代码如下:现在,对
doSomething()
的每次迭代调用都会获得xyz.php
中定义的常量值 .在
PSR-0 / PSR-4
自动加载器的时代,如果您只需要创建一些函数/类,则可能完全没有必要使用任何语句可用于您的代码(当然,如果仍然使用PHP作为模板引擎,您仍然需要在引导程序文件中使用require_once
autoloader本身和include
模板) .require
或include
?require
和include
函数执行相同的任务,即包含和评估指定的文件,但区别是require
将在指定的文件位置无效或任何错误时导致致命错误,而include
将生成警告并继续执行代码 .因此,如果您尝试包含的文件是 heart of the system ,可能会使用
require
函数,并且可能会对其余代码造成巨大影响,并且当您尝试包含的文件很简单时,可以使用include
函数文件包含一些不太重要的代码 .我的个人建议(对于不那么重要的代码)是在代码的各个地方使用
require
函数,因为它处于开发阶段,以便您可以调试代码,然后通过include
函数替换所有require
函数,然后再将其转移到 生产环境 环境中如果您错过了任何错误,它将不会影响最终用户,其余代码正确执行...require_once
或require
?require
和require_once
之间的基本区别是require_once
将检查文件是否已包含(如果已包含),则不包含该文件,而require
函数将包含该文件,无论文件是否已包含在内 .因此,如果您想要一次又一次地包含一些代码而使用
require
函数,而如果您想在代码中只包含一些代码,请使用require_once
.当您需要加载任何类,函数或依赖项时,请使用 require 函数 .
如果要加载模板样式文件,请使用 include 函数
如果您仍然感到困惑,请一直使用 require_once .
它们都是包含文件的方式:
需要意味着它需要它 . Require_once意味着它需要它,但只需要它一次 . 包含意味着它将包含一个文件,但不需要它继续 .
例子:
需要'文件名'Require_once'filename'包含'文件名'
还有一个include_once函数,它包含一次文件 .
Include_once'filename'
当我在手机上打字时,请不要使用大写字母 .
感谢您的时间 .
基本上,如果你需要一个错误的路径,PHP会抛出一个致命错误并调用shutdown函数,但是当你包含一个错误的路径时,PHP会继续执行,但它只会显示一个警告,指出该文件不存在 .
从英文单词require,PHP被告知页面或文件的执行取决于所需的文件 .
根据我的经验,需要重要文件(例如配置文件,数据库类和其他重要实用程序)是常态 .
前几天我被问到PHP中include和require之间的区别是什么 . 它们似乎功能相同,但存在显着差异 .
首先,既不包含也不要求是函数,它们是构造 . 因此没有必要使用像include('file.php')这样的括号来调用它们;相反,它更喜欢使用include'file.php' .
当无法找到包含的文件时,include和require之间出现差异:include将发出警告(E_WARNING)并且脚本将继续,而require将发出致命错误(E_COMPILE_ERROR)并停止脚本 . 如果包含的文件对于正确运行的脚本的其余部分至关重要,那么您需要使用require .
您应该在开发过程中拾取require抛出的任何致命错误,并在将脚本发布到野外之前解决它们;但是,如果不是直截了当,你可能会考虑使用include来制定计划B: -
在这个示例中,include用于获取'file.php',但如果失败,我们使用@来抑制警告并执行一些替代代码 . 如果找不到文件,include将返回false .
include_once和require_once分别表现得像include和require,除非它们只包含文件(如果尚未包含) . 否则,他们会抛出同样的错误 .
简而言之:
include: 包含一个文件并对其进行评估 . 如果找不到文件或无法读取文件,PHP将发出警告 .
include_once: 如果指定include_once,则PHP将确保它仅包含该文件一次 .
require: PHP将包含一个文件并对其进行评估 . 如果找不到或无法读取文件,则会生成致命错误 .
require_once: 至于include_once,但会生成致命错误而不是警告 .
require
的开销大于include
,因为它必须先解析文件 . 用includes
替换requires
通常是一种很好的优化技术 .只需使用require和include .
因为想想如何使用include_once或require_once . 那就是寻找保存包含或需要的PHP文件的日志数据 . 所以这比include和require慢 .
就这样使用......