关键文件用require,非关键文件用include;定义类/函数/常量必须用_once后缀并统一用__dir__拼接绝对路径;require失败抛e_compile_error终止脚本,include失败仅发e_warning继续执行。

直接说结论:关键文件用 require,非关键或可选文件用 include;定义类/函数/常量时必须加 _once 后缀,且路径必须统一用 __DIR__ 拼接。
require 失败就停,include 失败只警告
这是最直接影响你调试体验的区别。一旦 require 找不到文件,PHP 抛出 E_COMPILE_ERROR,脚本立刻终止——连 echo 都没机会执行,页面可能完全空白;而 include 只触发 E_WARNING,后续代码照常跑。
- 开发中临时注释掉一个模板?用
include,避免整页崩掉 - 数据库配置、核心类库?必须用
require,让问题在启动阶段暴露,而不是藏在某个分支里悄悄失败 - PHP 8+ 默认不显示警告,
include失败可能“静默”发生,务必检查错误日志或手动开启error_reporting(E_ALL)
include_once 和 require_once 不是“更安全”,而是“不用就报错”
当你重复 include 或 require 同一个定义了函数或类的文件时,PHP 会直接报 Fatal error: Cannot redeclare ...。这时 _once 版本不是可选项,是必需项。
访问全球海洋潮汐模型。功能包括查询指定日期、时间和地点的潮高、潮汐极值及格点天气数据。
- PHP 判断“是否已包含”只看路径字符串,不是物理文件。下面两行会被当成两个不同文件:
require_once 'helper.php'和require_once './helper.php' - 实操中必须统一用
__DIR__构建绝对路径:require_once __DIR__ . '/lib/Database.php' -
require_once比include_once更常用,因为核心依赖几乎从不“可选”
别信“编译时 vs 运行时”,真正影响你的是加载时机和条件能力
网上常说 require 是编译时包含、include 是运行时包含,这个说法容易误导。实际上两者都在运行期解析,区别在于:include 支持作为表达式使用并返回布尔值,require 不能。
- 你可以写:
if (include 'config.local.php') { /* 加载成功才执行 */ } - 但
require不能放在条件表达式里,它无条件执行,哪怕所在if分支根本不会进入 - 循环中要动态加载不同文件(比如
include "template_{$i}.php"),只能用include;如果每次都加载同一文件,require略高效(内容直接替换语句)
最容易被忽略的点:路径漂移。相对路径在 include/require 中受当前工作目录影响,__DIR__ 是唯一靠谱的锚点。哪怕只是多一个点、少一个斜杠,都可能导致 _once 失效或文件找不到。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










