我已经读过 include 和 require 之间的区别之一是,虽然 include 仅在遇到 include 语句时才包含包含的文件,但 require 将文件包含到托管 require 语句的文件中,即使在 require 代码未到达时也是如此。执行流程。
这怎么可能有任何影响。毕竟,如果我有一个文件说:
<?php
echo __LINE__;
?>
输出将始终为 3,而不是在包含此类包含文件的文件内的位置打印行。
据我所知,这根本不是真的。如果require
代码中没有到达该行,则该文件肯定不会被包含在内。
require
与失败相同,include
但它也会产生致命的E_COMPILE_ERROR级别错误。
(强调我添加的“除外”)
据我所知,这不是 require 的工作方式。唯一实际的区别是,如果无法包含文件, require 将导致脚本终止,并且 include 只会发出警告并继续执行。
一个非常重要的习惯用法取决于您声明的行为不正确:条件要求的文件。
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
到目前为止,赢了。
PS:被秒杀!
假设您正在运行一个关键任务应用程序,并且每秒将损失 1 美元。有些库仅在特定情况下使用,不会影响您的业务流程。您可能应该对这些可选库使用include_once。因为如果该文件不存在,require将阻止您的应用程序运行并出现致命错误。