PHP:require与include的实际考虑?

3

我读过一些关于include和require之间的区别,其中之一是,当遇到include语句时,include仅包含所包含的文件,而当执行流程未到达require代码时,require将文件包含到托管require语句的文件中。

这会有什么影响呢?毕竟,如果我有一个文件,它说:

<?php
  echo __LINE__;
?>

输出总会是3,而不是在包含该包含文件的文件位置内打印行。
6个回答

7
据我所知,这是完全不正确的。如果在代码中未到达require行,则文件肯定不会被包含。 require的PHP手册指出:

requireinclude完全相同,除了在失败时它还会产生致命的E_COMPILE_ERROR级别错误。

(强调“除了”的是我添加的)

2
据我所知,这不是 `require` 的工作方式。唯一的实际区别在于:如果无法包含文件,则 `require` 将导致脚本终止,而 `include` 仅会发出警告并继续执行。
一个非常重要的习惯用法依赖于你所述的行为不成立:条件需要的文件。
if(is_secure_page()) {
  require "security.php";
}

2

requireinclude 都会在执行流程到达它们的位置时包含它们所引用的文件。

一个简单的测试案例如下:

if (false) {
  require_once("Nonexistent.php");
}
echo "I'm doing SCIENCE and I'm still alive.\n";

1

require,或者更好的选择是require_once,应该仅在您想要包含应用程序实际所需的代码时使用,例如您需要的任何库。 include及其兄弟include_once仅在所包含的文件对于脚本的执行不是必需的情况下使用,例如当您加载侧边栏或某些次要内容时。

两个语句之间唯一真正的区别是,如果找不到文件,则require会抛出致命错误,而include只会抛出警告并继续快乐地运行。

我认为requireinclude都以完全相同的方式加载和解析。如果require在给定上下文中加载文件,那么include也会这样做。


1

我个人总是使用require_once,我发现在大多数情况下这就是你需要的(无论是你只获取页面一次还是停止脚本)。而include会抛出警告,如果你想“尝试”包含一些东西,你需要隐藏它们。但这只是糟糕的编程实践,一个简单的if (file_exists($file)) require_once $file;就可以解决问题,完全胜过include

所以在我看来,require远胜过其他。

附注:被秒杀了!


这怎么回答问题? - kapa

1
假设您正在运行一项关键任务应用程序,每秒将损失1美元。某些库仅在特定情况下使用,不会影响您的业务流程。对于这些可选库,您应该使用include_once。因为如果文件不存在,require将停止应用程序并显示致命错误。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接