Php 中“ include”和“ need”的区别

他们之间有什么区别吗?使用它们是一个偏好的问题吗?用一个比用另一个有什么好处吗?哪个更安全?

122582 次浏览

如果文件无法加载,require将抛出一个 PHP 致命错误。(执行停止)

如果无法加载文件,include将生成一个警告。(执行继续)

这是一个不错的 包括和要求差异的说明:

enter image description here

差异需求 vs 包含 php (作者: Robert; 2012年11月)

您可以在关于 require的详细 PHP 手册中找到解释的差异:

require < em > include 完全相同,除非出现故障,否则也会产生致命的 E_COMPILE_ERROR级错误。换句话说,它将停止脚本,而 include 只发出一个警告(E_WARNING) ,允许脚本继续。

有关示例,请参见 @ Efritz 的回答

如果你不介意你的脚本在不加载文件的情况下继续使用 include(如果它不存在等) ,你可以(尽管你不应该)使用一个警告错误信息显示。

使用 require意味着如果不能加载指定的文件,脚本将停止,并抛出致命错误。

正如其他人指出的那样,惟一的区别在于 request 抛出了一个致命的错误,并且包含了一个可捕捉的警告。至于使用哪一个,我的建议是坚持包括。为什么?因为您可以捕获警告并向最终用户提供有意义的反馈。考虑一下

  // 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!";
}

注意: 例如,要工作,您需要安装一个错误到异常处理程序,如下面的 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";
?>

一个非常简单的实用代码示例。 将显示第一个回声。无论您使用 include 还是 request,都是因为它在 include 之前运行或者需要。

为了检查结果,代码的第二行故意提供文件的错误路径或在文件名中出错。因此,要显示的第二个回显将完全取决于您使用的是 要求还是 包括

如果使用 要求,第二个回显将不会执行,但是如果使用 包括,无论出现什么错误,您都将看到第二个回显的结果。

当无法找到所包含的文件时,就会出现 include()require()之间的差异: include()将发出警告(警告) ,脚本将继续,而 require()将发出致命错误(E _ COMPILE _ ERROR 错误)并终止脚本。如果包含的文件对于正确运行脚本的其余部分至关重要,那么您需要使用 require()

详情请浏览: PHP 中包含与需求的区别