我读过一些关于include和require之间的区别,其中之一是,当遇到include语句时,include仅包含所包含的文件,而当执行流程未到达require代码时,require将文件包含到托管require语句的文件中。
这会有什么影响呢?毕竟,如果我有一个文件,它说:
<?php
echo __LINE__;
?>
输出总会是3,而不是在包含该包含文件的文件位置内打印行。
require
行,则文件肯定不会被包含。
require
的PHP手册指出:
(强调“除了”的是我添加的)
require
与include
完全相同,除了在失败时它还会产生致命的E_COMPILE_ERROR级别错误。
if(is_secure_page()) {
require "security.php";
}
require
和 include
都会在执行流程到达它们的位置时包含它们所引用的文件。
一个简单的测试案例如下:
if (false) {
require_once("Nonexistent.php");
}
echo "I'm doing SCIENCE and I'm still alive.\n";
require
,或者更好的选择是require_once
,应该仅在您想要包含应用程序实际所需的代码时使用,例如您需要的任何库。 include
及其兄弟include_once
仅在所包含的文件对于脚本的执行不是必需的情况下使用,例如当您加载侧边栏或某些次要内容时。
两个语句之间唯一真正的区别是,如果找不到文件,则require
会抛出致命错误,而include
只会抛出警告并继续快乐地运行。
我认为require
和include
都以完全相同的方式加载和解析。如果require
在给定上下文中加载文件,那么include
也会这样做。
我个人总是使用require_once
,我发现在大多数情况下这就是你需要的(无论是你只获取页面一次还是停止脚本)。而include
会抛出警告,如果你想“尝试”包含一些东西,你需要隐藏它们。但这只是糟糕的编程实践,一个简单的if (file_exists($file)) require_once $file;
就可以解决问题,完全胜过include
。
所以在我看来,require
远胜过其他。
附注:被秒杀了!