能,但仅限 include 和 include_once;其返回值为被包含文件中 return 的值或默认的 1/false,而 require 无返回值且失败时直接终止脚本。

能,但只限 include 和 include_once,且返回值不是“文件执行结果”,而是语言结构本身的执行状态或被包含文件中 return 语句的值。
include 有返回值,require 没有返回值
include 是表达式,有明确返回值:成功时返回 1,失败(如文件不存在)时返回 false;require 是语句,不返回可参与运算的值——它失败时直接终止脚本,根本没机会“返回”什么。
常见错误写法:
if (include 'config.php') { ... }
这看似合理,但实际会触发 Notice(PHP 8+ 默认开启严格模式时更易暴露):因为 include 的返回值是整数 1,而 if 中用 == true 判断会隐式转换,容易误判。正确做法是显式比较:
立即学习“PHP免费学习笔记(深入)”;
- 用
(include 'config.php') === 1判断是否成功载入 - 用
(include 'config.php') !== false判断是否未因文件缺失而中断 - 避免裸写
if (include ...),尤其在 error_reporting 开启 E_NOTICE 时
被包含文件里的 return 会覆盖 include 的返回值
如果 a.php 中写了 return 'loaded';,那么 $res = include 'a.php'; 后,$res 就是字符串 'loaded',不再是 1。
这个特性常被用于配置文件返回数组:
<?php
// config.php
return [
'host' => 'localhost',
'port' => 3306
];
$cfg = include 'config.php'; // $cfg 是关联数组,不是 1
注意点:
-
require不允许被包含文件使用return,否则报Fatal error: Cannot use return statement in global scope -
include_once行为同include,也支持被包含文件return - 若被包含文件没有
return,则include回归默认行为:成功返回1
file_get_contents 不是文件包含,别和 include 混用
有人想“取内容再 eval”,于是用 file_get_contents 加 eval 模拟 include,这是危险且低效的:
-
file_get_contents返回的是字符串或false,不执行 PHP 代码 -
eval()执行字符串风险极高,禁用allow_url_include后仍可能绕过限制 -
include支持php://filter等伪协议,file_get_contents不支持语法解析上下文 - 性能上,
include是 Zend 引擎原生加载,file_get_contents + eval多一层解析开销
真正需要“带返回值的包含”,就用 include;需要无条件加载并失败即停,就用 require;想避免重复加载又保留返回能力,选 include_once。别试图用其他函数模拟——它们语义不同,错误处理路径也完全不同。



















