它们之间有什么区别吗?使用它们是个人偏好吗?使用其中一种是否会产生任何优势?哪一种对于安全性更好?
它们之间有什么区别吗?使用它们是个人偏好吗?使用其中一种是否会产生任何优势?哪一种对于安全性更好?
require
会在文件无法加载时抛出PHP致命错误(执行停止)。
include
如果文件无法加载,则产生警告(执行继续)。
这里有一个漂亮的include和require差异的图示:
来自: Difference require vs. include php (作者 Robert; 2012年11月)
你可以在 require
页面的详细PHP手册中找到下面的区别解释:
require
和include
函数几乎相同,但当失败时,它会产生一个致命的E_COMPILE_ERROR
级别的错误,也就是说,它将停止脚本的执行,而include
只会发出警告(E_WARNING
),并允许脚本继续执行。
请参考@efritz的回答获得一个示例。
$flibbertygibbet
存在,那么<?php if (isset($flibbertygibbet)) require 'file.php';
似乎会使得这个答案完全不正确。否则,即使条件不为真,我应该也会得到一个致命错误。strace
并没有显示PHP尝试访问file.php
文件。 - cHaoif (false) require 'file.php';
会导致'file.php'被加载(但不会被执行)。TLDR忽略所有这些评论。 - Kevin Wheeler如果您不介意脚本继续运行而不加载文件(例如文件不存在等情况),则可以使用include
,并且您可以(尽管不应该)接受显示警告错误消息。
使用require
表示如果无法加载指定的文件,则您的脚本将停止,并抛出致命错误。
include()
和 require()
的区别在于,如果被包含的文件找不到:include()
会发出一个警告 (E_WARNING) 且脚本会继续执行,而 require()
则会发出致命错误 (E_COMPILE_ERROR) 并终止脚本。如果所包含的文件对脚本正常运行至关重要,则需要使用 require()
。正如其他人指出的那样,唯一的区别在于 require 抛出致命错误,而 include 则是可以捕获的警告。至于使用哪个,我的建议是坚持使用 include。为什么呢?因为你可以捕获警告并为最终用户提供有意义的反馈。考虑以下:
// Example 1.
// users see a standard php error message or a blank screen
// depending on your display_errors setting
require 'not_there';
// Example 2.
// users see a meaningful error message
try {
include 'not_there';
} catch(Exception $e) {
echo "something strange happened!";
}
注意:如果要使示例2工作,您需要安装一个错误转异常处理程序,如此处所述:http://www.php.net/manual/en/class.errorexception.php
function exception_error_handler($errno, $errstr, $errfile, $errline ) {
throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
}
set_error_handler("exception_error_handler");
<?PHP
echo "Firstline";
include('classes/connection.php');
echo "I will run if include but not on Require";
?>
一个非常简单的实用示例,附带代码。 第一个echo将被显示。无论您使用include还是require,因为它在include或require之前运行。
为了检查结果,在代码的第二行故意提供错误的文件路径或文件名中出现错误。因此,第二个echo是否显示完全取决于您使用require还是include。
如果您使用require,则不会执行第二个echo,但如果您使用include,则无论出现什么错误,都将看到第二个echo的结果。
如果使用Include程序,程序不会终止并在浏览器上显示警告。另一方面,如果文件未找到,则使用Require程序将终止并显示致命错误。