我读到include和require之间的区别之一是如果include语句为遇到,require将文件包含到托管require的文件中语句,即使执行流未到达require代码。
这怎么会有任何影响呢。毕竟,如果我有一个文件,上面写着:
<?php
echo __LINE__;
?>
输出将始终为3,而不是在包含此类包含文件的文件内部的位置。
据我所知,这根本不是真的。如果代码中没有到达require
行,则文件肯定不会包含在内。
关于require
的PHP手册指出:
require
与include
相同,不同之处在于一旦发生故障,它也将产生严重的E_COMPILE_ERROR级别错误。
(强调我添加的"except")
据我所知,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";
假设您正在运行一个任务关键型应用程序,每秒将损失1美元。有些库只在特定情况下使用,不会影响您的业务流程。对于这些可选库,您可能应该使用includeonce。因为如果文件不存在,require将导致应用程序停止运行,并出现致命错误。
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:被打败了一秒钟!