我想知道什么时候应该使用include
orrequire
以及每个的优点是什么。
8 回答
正如其他人所说,如果“require”没有找到它正在寻找的文件,则执行将停止。如果 include 没有归档它正在寻找的文件,则执行将继续。
一般来说,导入代码/类/函数库时应该使用require。如果您尝试调用一个函数、实例化一个类等,但定义不存在,就会发生坏事。因此,您需要php 来包含您的文件,如果不能,则停止。
当您使用 PHP 输出内容或以其他方式执行代码时使用 include,如果它不运行,则不一定会破坏以后的代码。典型的例子是在模型/视图/控制器框架中实现视图。视图中不应定义任何新内容,也不应更改应用程序状态。因此,使用包含是可以的,因为失败不会破坏应用程序中发生的其他事情。
一个小切线。关于 include、require、require_once 和 include_once 的性能,有很多相互矛盾的信息和错误信息。它们在不同的情况/用例下表现完全不同。这是您真正需要在自己的应用程序中对差异进行基准测试的地方之一。
区别在于:如果找不到资源,include 不会失败,require 会。老实说,完全存在 include 有点愚蠢,因为如果你试图加载一个资源,你几乎指望它在那里。如果您要使用任何东西,我建议您始终使用 require_once,这样您就不会遇到冲突(即,如果另一个脚本需要相同的文件)并且您的代码始终按预期工作,因为您知道自己的资源包括在那里(否则它会失败)。
如果文件是可选的,请包含它。例如,您可能有一个文件“break-news.txt”,它在有突发新闻时创建,但在没有突发新闻时不存在。如果没有突发新闻,它可以在没有脚本中断的情况下被包含在内。
如果脚本的其余部分需要该文件才能正常运行,则需要该文件。
根据http://www.alt-php-faq.org/local/78/:
与 include() 不同,require() 将始终读取目标文件,即使它所在的行从不执行。如果要有条件地包含文件,请使用 include()。条件语句不会影响 require()。但是,如果出现 require() 的那一行没有被执行,那么目标文件中的任何代码都不会被执行。
用简单的语言来说,如果我们使用 require ,我们必须确保该文件在那个时代存在,而在 include 的情况下则没有必要。但尝试确保文件存在。
Include and require are identical, except upon failure:
require will produce a fatal error (E_COMPILE_ERROR) and stop the script
include will only produce a warning (E_WARNING) and the script will continue
你可以用例子来理解 include("test.php"); echo "\n此行将被打印";
输出:警告:include(test.php):打开流失败:/var/www/........ 将打印此行
要求(“test.php”);echo "\n此行将被打印"; 警告:需要(test.php):打开流失败:/var/www/...中没有这样的文件或目录
Require()
并且include()
在处理故障方面是相同的。但是,require()
会导致致命错误并且不允许处理该页面。即包含将允许脚本继续。