在PHP中:
- 什么时候应该使用
require
与include
? - 什么时候应该使用
require_once
和include_once
?
#1楼
您应该将类和函数定义组织在文件中。
使用require_once()
来加载依赖项 (类,函数,常量)。
使用require()
加载类似模板的文件 。
使用include_once()
加载可选的依赖项 (类,函数,常量)。
使用include()
加载可选的类似模板的文件 。
#2楼
每当您使用require_once()
时,只要在当前文件中仅一次需要被调用的文件,便可以在一个文件中使用它来包含另一个文件。 在此示例中,我有一个test1.php。
<?php
echo "today is:".date("Y-m-d");
?>
在另一个我命名为test2.php的文件中
<?php
require_once('test1.php');
require_once('test1.php');
?>
当您观看m两次需要test1文件时,该文件将一次包含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会一次包含该文件,但会停止进一步执行。
#3楼
require
具有比include
更大的开销,因为它必须首先解析文件。 用includes
替换requires
通常是一种很好的优化技术。
#4楼
还有require
和include_once
。
所以你的问题应该是...
- 什么时候应该使用
require
与include
? - 我何时应该使用
require_once
与require
这里描述1的答案。
require()函数与include()相同,除了它对错误的处理方式不同。 如果发生错误,include()函数将生成警告,但脚本将继续执行。 require()产生致命错误,脚本将停止。
在这里可以找到2的答案。
require_once()语句与require()相同,除了PHP会检查文件是否已包含,如果不包含,则不要再次包含(require)该文件。
#5楼
_once函数与不具有_once函数之间的区别:不具有_once代码将再次被包含,而具有_once函数的PHP将跟踪包含的文件,并且仅包含一次。
require和include之间的区别:如果未找到必需的文件,PHP将发出致命错误,而对于include,将仅发出警告。
#6楼
区别在于命令生成的错误。 使用require
,确实需要使用要使用的文件,如果找不到该文件,则会生成一个E_ERROR
。
require()
与include()
相同,除了失败时还会产生致命的E_ERROR
级错误。
include
仅在失败时生成E_WARNING
错误,该错误或多或少是无声的。
因此,如果需要使用文件才能使其余代码正常工作,并且您希望脚本失败,请使用该文件不可用。
对于*_once()
:
include_once()
可用于在脚本的特定执行过程中可能多次包含和评估同一文件的情况,因此在这种情况下,它可以帮助避免诸如函数重新定义,变量值重新分配等问题。
当然,这同样适用于require_once()
。
参考: require()
, include_once()
#7楼
带有require的文件必须存在,如果不存在则将显示错误。 而使用include-如果文件不存在,则页面将继续加载。
#8楼
采用
要求
当您的应用程序需要该文件时,例如重要的消息模板或包含配置变量的文件,如果没有这些文件,应用程序将无法运行。require_once
当文件包含的内容在随后的包含时会产生错误时,例如,在您的应用程序中肯定需要使用函数Importantfunction important() { /* important code */}
,但由于无法重新声明函数,因此不应再次包含。在不需要文件时包括在内 ,并且在找不到文件时应继续应用程序流程,例如
非常适合引用当前作用域或其他内容的模板include_once
可选的依赖项,会在后续加载或远程文件包含时产生错误,由于HTTP开销,您不想重复执行两次
但基本上,什么时候使用取决于您。
#9楼
我的建议是仅在99.9%的时间内使用require_once
。
使用require
或include
意味着您的代码不可在其他地方重用,即您要拉入的脚本实际上是在执行代码,而不是提供类或某些函数库。
如果您需要/包括当场执行的代码,那么这就是程序代码,并且您需要了解新的范例 。 类似于面向对象的编程,基于函数的编程或函数式编程。
如果您已经在进行面向对象的编程或函数式编程,那么使用include_once
通常会延迟在堆栈中发现错误/错误的位置。 您是否想知道函数do_cool_stuff()
在以后再调用时不希望使用,或者在需要通过使用库来期望它可用的那一刻不可用? 通常,最好立即知道您需要和期望的东西是否不可用,因此只需使用require_once
。
另外,在现代OOP中,只需在使用时自动加载类即可。
#10楼
需要关键部分,例如授权,并包括所有其他部分。
多个包含项只是非常糟糕的设计,必须完全避免。 因此,* _ once并不重要。
#11楼
使用“ include”可重复使用的PHP模板。 对必需的库使用“ require”。
“ * _once”很不错,因为它检查文件是否已经加载,但是对我来说只有在“ require_once”中才有意义。
#12楼
需要加载任何类,函数或依赖项时,请使用require函数。
要加载模板样式的文件时,请使用包含功能
如果仍然感到困惑,请始终使用require_once 。
#13楼
一种用途何时应
require
或include
?require
和include
函数执行相同的任务,即include和评估指定的文件,但是当指定的文件位置无效或发生任何错误时,require
会导致致命错误,而include
将生成警告并继续执行代码。因此,如果您要包含的文件是系统的核心,并且可能对其余代码产生巨大影响,则可以使用
require
函数,并且在您要包含的文件时可以使用include
函数。是一个包含一些不太重要的代码的简单文件。我个人的建议(对于不太重要的代码)是在开发阶段,在代码中的任何地方使用
require
函数,以便您可以调试代码,然后在将其移入生产环境之前通过include
函数替换所有require
函数,以便如果您错过任何错误,将不会影响最终用户,并且其余代码将正确执行...什么时候应该使用
require_once
或require
?require
和require_once
之间的基本区别是require_once
将检查文件是否已包含(如果已包含),则它将不包含文件,而require
函数将包含该文件,而不管文件是否已包含。因此,如果您想一次又一次地包含一些代码,请使用
require
函数,而如果您只想一次在代码中包含一些代码,请使用require_once
。
#14楼
只需使用require和include。
因为考虑如何使用include_once或require_once。 那是在寻找保存包含的或必需的PHP文件的日志数据。 因此,这比包含和要求慢。
if (!defined(php)) {
include 'php';
define(php, 1);
}
只是这样使用...
#15楼
在PSR-0 / PSR-4
自动加载器时代,如果您所需要做的只是使代码可以使用某些函数/类,则完全不需要使用任何语句(当然,您仍然需要require_once
自动加载器本身) (如果您仍使用PHP作为模板引擎,请在引导文件中添加并include
模板)。
#16楼
我正在使用如下功能:
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
定义的常量值。
#17楼
基本上,如果您需要错误的路径,PHP会引发致命错误并调用shutdown函数,但是当您包含错误的路径时,PHP将继续执行,但只会显示警告文件不存在。
从英文单词require开始 ,PHP被告知页面或文件的执行取决于所需的文件。
根据我的经验,通常需要重要文件,例如配置文件,数据库类和其他重要实用程序。
#18楼
7年后的2018年答案
这个问题是七年前提出的,没有一个答案可以为问题提供实际的帮助。 在现代的PHP编程中,您主要只使用一次required_once
来包含您的autoloader类(通常是composer autoloader),它将加载您的所有类和函数(功能文件需要显式添加到composer.json
文件中,才能在所有其他文件)。 如果由于某种原因无法从自动加载器加载您的类,请使用require_once
加载它。
在某些情况下,我们需要使用require
。 例如,如果您有很大的数组定义,并且不想将其添加到类定义源代码中,则可以:
<?php
// arr.php
return ['x'=>'y'];
<?php
//main.php
$arr= require 'arry.php'
如果您打算包含的文件包含可执行文件或声明了一些变量,则几乎总是需要使用require
,因为如果您将require_once
放在首位以外,则您的代码将不会被执行和/或您的变量将不会静默启动,从而导致绝对难以确定的错误。
实际上,对于include
和include_once
没有实际的用例。
#19楼
它们都是包括文件的所有方式。
需求意味着它需要它。 Require_once表示将需要它,但只需要一次。 包含意味着它将包含一个文件,但不需要继续。
例子:
Require 'filename'
Require_once 'filename'
Include 'filename'
还有一个include_once函数,一次包含一个文件。
Include_once 'filename'
在手机上输入内容时,请不要在大写字母处使用。
#20楼
我注意到的一件事,当使用包含时,我只能从包含它的文件中访问包含文件的功能。 使用require_once,我可以在第二个require_once文件中运行该功能。
还:我建议添加
if(file_exists($RequiredFile)){
require_once($RequiredFile);
}else{
die('Error: File Does Not Exist');
}
因为当require_once杀死该页面时,它有时可以回显您网站文件的目录
这是我需要文件的自定义函数:
function addFile($file, $type = 'php', $important=false){
//site-content is a directory where I store all the files that I plan to require_once
//the site-content directory has "deny from all" in its .htaccess file to block direct connections
if($type && file_exists('site-content/'.$file.'.'.$type) && !is_dir('site-content/'.$file.'.'.$type)){
//!is_dir checks that the file is not a folder
require_once('site-content/'.$file.'.'.$type);
return 'site-content/'.$file.'.'.$type;
}else if(!$type && file_exists('site-content/'.$file) && !is_dir('site-content/'.$file)){
//if you set "$type=false" you can add the file type (.php, .ect) to the end of the "$file" (useful for requiring files named after changing vars)
require_once('site-content/'.$file);
return 'site-content/'.$file;
}else if($important){
//if you set $important to true, the function will kill the page (which also prevents accidentally echoing the main directory path of the server)
die('Server Error: Files Missing');
return false;
}else{
//the function returns false if the file does not exist, so you can check if your functions were successfully added
return false;
}
}
用法示例:
$success = addFile('functions/common');
if($success){
commonFunction();
}else{
fallbackFunction();
}
#21楼
从手册 :
require()
与include()
相同,除了失败时还会产生致命的E_COMPILE_ERROR
级错误。 换句话说,它将停止脚本,而include()
仅发出警告(E_WARNING
),该警告允许脚本继续运行。
_once()
变体也是如此。
#22楼
如果不能包含文件, include()
将发出警告,但脚本的其余部分将运行。
require()
将引发E_COMPILE_ERROR
并在脚本不能包含文件的情况下停止脚本。
如果已经包含include_once()
和require_once()
函数,则第二次将不包含该文件。
请参阅以下文档页面:
#23楼
require()与include()相同,除了失败时还会产生致命的E_COMPILE_ERROR级错误。 换句话说,它将停止脚本,而include()仅发出警告(E_WARNING),该警告允许脚本继续运行。
与include / require相同,不同之处在于PHP将检查文件是否已被包含,如果不包含,将不再对其进行包含(要求)。
#24楼
当找不到文件时, include()
将生成警告,但是require_once()
将生成致命错误。
另一件事是如果以前包含文件。 然后require_once()
将不再包含它。