Skip to content

PHP基础 include include_once require require_once

在 PHP 中,includeinclude_oncerequirerequire_once 都是用于在脚本中引入其他文件的关键字,但它们有一些重要的区别:

1. include

  • 引入指定的文件
  • 如果文件不存在,会产生 警告 (E_WARNING),但脚本会继续执行
  • 可以多次引入同一个文件
php
<?php
include 'config.php';
include 'functions.php';

// 如果文件不存在,会显示警告但脚本继续
include 'non_existent_file.php'; // 产生警告
echo "这行代码仍然会执行";
?>

2. include_once

  • include 功能相同
  • 但如果文件已经被引入过,则不会再次引入
  • 避免重复引入导致的函数重定义等问题
php
<?php
include_once 'config.php';
include_once 'config.php'; // 这行不会再次引入,避免重复

// 适用于定义函数、类的文件
include_once 'MyClass.php';
?>

3. require

  • 引入指定的文件
  • 如果文件不存在,会产生 致命错误 (E_COMPILE_ERROR),脚本停止执行
  • 用于引入必需的文件
php
<?php
require 'database.php'; // 必需的文件

// 如果文件不存在,脚本会停止执行
require 'essential_config.php'; // 文件不存在则报错停止
echo "这行代码不会执行"; // 如果上面出错,这行不会执行
?>

4. require_once

  • require 功能相同
  • 但如果文件已经被引入过,则不会再次引入
php
<?php
require_once 'core.php';
require_once 'core.php'; // 不会重复引入

// 常用于引入类定义、重要配置
require_once 'App.php';
?>

使用场景对比

场景推荐使用原因
模板文件include不是必需的,缺失不影响核心功能
配置文件requirerequire_once必需的,缺失应停止执行
函数库include_oncerequire_once避免函数重定义
类定义文件require_once必需且避免类重定义
可选的模块include不是必须的

实际示例

php
<?php
// 必需的配置文件
require 'config/database.php';

// 核心类 - 只需引入一次
require_once 'classes/Database.php';
require_once 'classes/User.php';

// 可选的功能模块
include 'modules/analytics.php'; // 没有也不影响主要功能

// 模板文件
include 'templates/header.php';
include 'templates/footer.php';
?>

最佳实践

  1. 使用 require_once 引入类文件和核心库
  2. 使用 include 引入可选的模板或模块
  3. 总是检查文件路径是否正确
  4. 考虑使用自动加载器替代手动引入
php
<?php
// 使用自动加载的现代方式
spl_autoload_register(function ($class) {
    require_once 'classes/' . $class . '.php';
});

// 手动引入的方式(传统)
require_once 'config.php';
require_once 'functions.php';
include 'header.html';
?>

选择哪个关键字取决于文件的重要性和是否可能被重复引入。

学而不思则罔,思而不学则殆。