本文目录导读:

在 PHP 中,include 和 require 都是用来引入并执行指定文件中的代码,它们的核心区别在于当引入的文件不存在或出错时的处理方式,以及由此引发的脚本执行流程差异。
require:“必须的”,如果文件找不到或出错,脚本会立即报错并停止执行(致命错误,E_COMPILE_ERROR)。include:“可选的”,如果文件找不到或出错,脚本会发出警告(Warning),但脚本会继续往下执行。
表格对比
| 特性 | require |
include |
|---|---|---|
| 文件失败时行为 | 产生致命错误,脚本停止 | 产生警告,脚本继续 |
| 错误级别 | E_COMPILE_ERROR |
E_WARNING |
| 是否阻止执行 | 是 | 否 |
| 适用场景 | 核心依赖,必须存在的文件(如数据库配置文件) | 非核心依赖,不致命的组件(如统计代码、广告模板) |
代码示例
假设有一个不存在的文件 config.php。
require 示例
<?php // 假设 nio.php 不存在 require 'nio.php'; echo "这行代码不会被执行,因为 require 失败了。"; ?>
结果:屏幕输出类似 Fatal error: require(): Failed opening required 'nio.php'...,然后脚本终止。echo 语句永远不会运行。
include 示例
<?php // 假设 nio.php 不存在 include 'nio.php'; echo "这行代码会被执行,因为 include 只是警告。"; ?>
结果:屏幕输出类似 Warning: include(nio.php): Failed to open stream...,然后紧接着输出 这行代码会被执行,因为 include 只是警告。 脚本继续运行。
引申:include_once 与 require_once
这两个是 include 和 require 的变体,额外增加了一个“防止重复引入”的功能。
include_once:如果该文件当前脚本中已经被引入过了,则不会再次引入。require_once:同上,但处理失败时行为等同于require(致命错误)。
为什么使用 _once 版本?
防止函数、类、变量重复定义导致的错误。
一个类定义文件 User.php 被两个不同的脚本包含,如果使用普通的 require,会导致“Cannot redeclare class User”的致命错误,使用 require_once 则可以安全地应对这种情况。
性能差异
- 在单次引入且文件存在的情况下,
include和require的性能差异可以忽略不计,不需要关注。 _once版本因为需要记录已加载的文件列表,性能会略低于非_once版本,但在绝大多数应用场景下,这个差异也极小,优先保证代码正确和可维护性。
权威建议
| 情况 | 推荐指令 |
|---|---|
| 配置文件、数据库连接类、核心函数库等缺失会导致整个应用瘫痪的文件 | require_once |
| 视图模板、可选组件、不关键的第三方库 | include 或 include_once |
| 在循环或频繁调用处引入文件 | 尽量避免 _once,可考虑手动判断或重构代码 |
核心原则:
- 如果你认为该文件必须存在,程序离了它就跑不动:用
require - 如果你认为该文件可有可无,即使缺失也不影响核心业务:用
include
通常情况下,在项目开发时使用
require_once是最保险的做法,它能保证依赖不缺失,且防止重复定义。