0Pricing
PHP Academy · 课时

包含和引入文件

使用 include 和 require 将页面拆分为可复用的部分。

包含和引入文件 是 CoddyKit 上的免费 PHP Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 PHP Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 PHP Academy 课程共包含 4 节课。

使用文件包含复用代码

PHP 提供四种语句,用于从其他文件中包含代码:

  • include — 包含文件;文件缺失时发出警告
  • require — 包含文件;文件缺失时产生致命错误
  • include_once — 仅在尚未包含时包含文件
  • require_once — 仅在尚未包含时要求文件

include 和 require

关键区别在于:缺失的 require 文件会导致致命错误,而缺失的 include 文件只会发出警告:

<?php
// Fatal error if missing — use for critical files
require 'config.php';
require 'database.php';

// Warning if missing, but execution continues
include 'optional_plugin.php';

// Use __DIR__ for reliable relative paths:
require __DIR__ . '/helpers/utils.php';

include_once 和 require_once

带有 _once 的变体可以防止同一个文件被多次包含:

<?php
// Without _once: including twice redefines functions
include 'functions.php';
include 'functions.php';  // Fatal: function redefined!

// With _once: second include is a no-op
require_once 'functions.php';
require_once 'functions.php';  // safe — skipped

// Rule: use require_once for class and function definition files

包含文件中的变量作用域

被包含的文件与包含它的文件共享作用域,但不共享函数作用域:

<?php
// main.php
$title = 'My Site';
require 'header.php';  // header.php can use $title

// But in a function:
function loadTemplate(): void {
    require 'header.php';  // $title is NOT accessible here!
    // Must pass data explicitly
}

从包含的文件返回值

包含的文件可以使用 return 语句返回值:

<?php
// config.php content:
// return ['debug' => true, 'db_host' => 'localhost'];

// main.php:
$config = require 'config.php';
echo $config['db_host'];  // localhost

// Common pattern for configuration files that return arrays

构建简单布局

请将页面拆分为可复用的页眉、内容和页脚文件:

<?php
// index.php
$pageTitle = 'Home Page';
$bodyClass = 'home';

require_once 'partials/header.php';
?>

<main class="container">
    <h1>Welcome!</h1>
    <p>Main content goes here.</p>
</main>

<?php require_once 'partials/footer.php'; ?>

模板局部视图

请为重复使用的组件创建可复用的局部视图文件:

<?php
// partials/card.php
// Expects: $card['title'], $card['body'], $card['url']
?>

<div class="card">
    <h3><a href="<?= htmlspecialchars($card['url']) ?>">
        <?= htmlspecialchars($card['title']) ?>
    </a></h3>
    <p><?= htmlspecialchars($card['body']) ?></p>
</div>

向局部视图传递变量

请在包含局部视图之前,通过局部变量赋值向其传递数据:

<?php
$articles = getArticles();

foreach ($articles as $article) {
    $card = [
        'title' => $article['title'],
        'body'  => substr($article['body'], 0, 100) . '...',
        'url'   => '/articles/' . $article['slug'],
    ];
    require 'partials/card.php';
}

include 与自动加载

在使用 Composer 的现代 PHP 中,类文件会自动加载,您无需手动包含它们:

<?php
// Old way (manual includes):
require 'classes/User.php';
require 'classes/Post.php';

// Modern way (Composer autoloading):
require __DIR__ . '/vendor/autoload.php';

// Classes are loaded automatically when first used
$user = new User();  // User.php loaded by autoloader
$post = new Post();  // Post.php loaded by autoloader

安全性:防止路径遍历

绝不要根据未经验证的用户输入来包含文件:

<?php
// DANGEROUS:
$page = $_GET['page'];
include $page . '.php';  // allows ../../etc/passwd

// SAFE: whitelist allowed pages
$allowed = ['home', 'about', 'contact'];
$page = $_GET['page'] ?? 'home';

if (!in_array($page, $allowed)) {
    $page = 'home';
}

include __DIR__ . '/pages/' . $page . '.php';

include_path 配置

请配置 PHP 的 include_path,这样无需完整路径即可包含文件:

<?php
// Current include_path:
echo get_include_path();

// Add your library directory:
set_include_path(
    get_include_path() . PATH_SEPARATOR . '/var/www/lib'
);

// Now you can include without full path:
include 'helpers.php';  // found in /var/www/lib/helpers.php

快速检查

文件缺失时,include 和 require 有什么区别?

回顾:包含文件

总结:

  • require — 文件缺失时产生致命错误;适用于关键文件
  • include — 文件缺失时发出警告;适用于可选文件
  • 带有 _once 的变体可以防止重复加载
  • 被包含的文件与调用方共享变量作用域
  • 文件可以使用 return 返回值
  • 绝不要从用户输入中获取包含路径——只能使用白名单

常见问题解答

「包含和引入文件」课时是免费的吗?

是的 — 「包含和引入文件」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 PHP Academy 课程的其余内容,请升级到 CoddyKit PRO。 PHP Academy 课程共包含 4 节课。

「包含和引入文件」这节课中我会学到什么?

使用 include 和 require 将页面拆分为可复用的部分。 你通过在浏览器中直接运行的动手代码来练习 PHP Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 PHP Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 PHP Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。

「包含和引入文件」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 PHP Academy 课中编写并运行代码吗?

能。每节 PHP Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. PHP 标签与嵌入语法
  2. 使用 PHP 循环生成动态 HTML
  3. 包含和引入文件
  4. 模板模式:分离逻辑与视图
← 返回 PHP Academy