PHP 引入 PHP

PHP 引入 PHP

在 PHP 开发中,我们几乎不会把所有代码写在一个文件里。将配置、函数、类、视图拆分到不同文件,通过 "引入" 机制组合使用,是实现代码复用、模块化开发的核心手段。

PHP 提供了四种常用的文件引入方式:includerequireinclude_oncerequire_once

引入方式

include:包含并运行文件

include 是最基础的引入方式,它会将指定文件的内容 "插入" 到当前位置并执行。

php 复制代码
include '文件路径';
// 或带括号(可选,风格问题)
include('文件路径');
  • 错误处理宽松 :如果引入的文件不存在,会抛出一个警告(Warning) ,但脚本会继续执行
  • 可重复引入:同一个文件可以被引入多次。

假设我们有一个公共的页头文件 header.php

php 复制代码
<!-- header.php -->
<!DOCTYPE html>
<html>
<head>
    <title>我的网站</title>
</head>
<body>
    <header>
        <nav>
            <a href="/">首页</a> | <a href="/about">关于</a>
        </nav>
    </header>

在首页 index.php 中引入它:

php 复制代码
<!-- index.php -->
<?php include 'header.php'; ?>

<main>
    <h1>欢迎来到首页</h1>
</main>

</body>
</html>

require:必须包含文件

require 的功能与 include 几乎完全一致,核心区别在于错误处理

php 复制代码
require '文件路径';
  • 错误处理严格 :如果引入的文件不存在,会抛出一个致命错误(Fatal Error) ,脚本会立即停止执行
  • 可重复引入

配置文件(如数据库配置)是 "必须存在" 的,用 require 更合适:

php 复制代码
<?php
// config.php(配置文件)
return [
    'db_host' => 'localhost',
    'db_user' => 'root',
    'db_pass' => 'your_password',
    'db_name' => 'test_db'
];
php 复制代码
<?php
// index.php
// 用 require 引入配置文件(如果 config.php 丢了,程序直接停止,避免后续错误)
$config = require __DIR__ . '/config.php';

// 使用配置
echo "数据库主机:" . $config['db_host'];

include_once / require_once:避免重复引入

如果引入的文件包含函数定义、类定义,重复引入会导致 "函数 / 类已定义" 的致命错误。

*_once 系列会自动检测文件是否已被引入,只引入一次

php 复制代码
include_once '文件路径';
require_once '文件路径';
  • 继承 include/require 的错误处理特性。
  • 自动去重:同一文件只引入一次,避免重复定义错误。

假设我们有一个函数库 functions.php

php 复制代码
<?php
// functions.php
function format_money($amount) {
    return '¥' . number_format($amount, 2);
}

如果不用 *_once,重复引入会报错:

php 复制代码
<?php
// 错误示范:不用 once
include 'functions.php';
include 'functions.php'; // 这里会报错:Fatal error: Cannot redeclare format_money()

使用 include_once 解决:

php 复制代码
<?php
// 正确示范:用 once
include_once 'functions.php';
include_once 'functions.php'; // 第二次引入会被自动忽略,不会报错

echo format_money(100); // 输出:¥100.00

关键区别对比表

方式 错误处理 重复引入 适用场景
include 警告,继续执行 允许 引入非必需的模板(如侧边栏)
require 致命错误,停止 允许 引入必需的核心文件(如配置)
include_once 警告,继续执行 禁止 引入函数库、类库(非必需)
require_once 致命错误,停止 禁止 引入函数库、类库(必需)

避坑重点:路径问题

引入文件时,路径写错是最常见的错误。

PHP 路径分为 "相对路径" 和 "绝对路径",推荐永远使用绝对路径

使用魔术常量 __DIR__(当前文件所在的目录)构建绝对路径,无论在哪里调用都不会出错。

php 复制代码
<?php
// public/index.php
// __DIR__ 是 "project/public",拼接 "/../config.php" 得到绝对路径
$config = require __DIR__ . '/../config.php';
include_once __DIR__ . '/../functions.php';

实用开发场景

MVC 中的视图模块化

在简单的 MVC 架构中,我们通常把视图拆分成 headerfooter 和主内容:

php 复制代码
<?php
// controller.php
$pageTitle = '文章列表';
$articles = [/* 文章数据 */];

// 引入头部
require __DIR__ . '/views/header.php';
// 引入主内容视图
require __DIR__ . '/views/article_list.php';
// 引入底部
require __DIR__ . '/views/footer.php';

自动加载类

如果类文件很多,一个个 require_once 太麻烦,可以使用 spl_autoload_register() 自动加载:

php 复制代码
<?php
// autoload.php
spl_autoload_register(function ($className) {
    // 假设类文件都在 src/ 目录下,类名与文件名对应
    $file = __DIR__ . '/src/' . $className . '.php';
    if (file_exists($file)) {
        require_once $file;
    }
});

// 使用时,直接 new 类,无需手动引入
require __DIR__ . '/autoload.php';
$user = new User(); // 自动加载 src/User.php

最佳实践总结

  1. 必需文件用 require :配置文件、核心函数库等 "丢了就不能运行" 的文件,用 requirerequire_once
  2. 函数 / 类用 *_once :凡是包含函数、类定义的文件,必须用 include_oncerequire_once,避免重复定义错误。
  3. 永远用 __DIR__ 构建绝对路径:告别相对路径的困扰,保证代码在任何环境下都能正常运行。
  4. 生产环境隐藏错误 :不要把 include/require 的错误信息直接暴露给用户,应在 php.ini 中关闭错误显示,记录到日志文件。
相关推荐
Amctwd3 小时前
【Android】将 html 打包为 apk
android·html·harmonyos
feng68_3 小时前
MySQL-Router+MySQL-MGR
android·linux·运维·数据库·mysql·adb
不会写DN3 小时前
php 如何使用mysqli连接mysql
开发语言·mysql·php
Kapaseker3 小时前
你知道屏幕上存在多少个 Window 吗
android·kotlin
Android技术之家3 小时前
Android Studio 专属AI智能体+Skills完整版提示词(可直接复制使用)
android·ide·人工智能·android studio
20岁30年经验的码农3 小时前
Java NIO底层实现原理
开发语言·php
xiegwei3 小时前
Android 原生项目添加 Flutter Activity 示例及常见报错解决方案
android·flutter
于慨4 小时前
Flutter Android gradle 8.14 file lock, incompatibility issue
android·flutter·issue
千百元4 小时前
HBuildX 打包成apk完整过程
android