包含和引入文件
使用 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 反馈 — 无需本地设置。