本文目录导读:

在PHP项目中,模板布局继承复用主要有以下几种常见方案,最推荐的是使用 原生PHP 结合简单的函数实现,或者使用 专业的模板引擎(如Twig、Blade)。
以下是几种主流实现方式:
原生PHP + 函数实现(轻量级,无需依赖)
这是最基础且性能最高的方式,适合简单的项目或不想引入额外依赖的情况。
核心思路: 定义 layout() 函数作为布局容器,使用 require 引入子模板。
定义布局文件(layout.php)
<?php
// layout.php - 主布局文件
function layout($title = '默认标题', $contentCallback) {
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8"><?= htmlspecialchars($title) ?></title>
</head>
<body>
<header>
<h1>网站通用头部</h1>
</header>
<main>
<?php
// 执行传入的回调函数,输出子模板内容
if (is_callable($contentCallback)) {
$contentCallback();
}
?>
</main>
<footer>
<p>网站通用底部 © 2023</p>
</footer>
</body>
</html>
<?php
}
?>
创建子模板(如 home.php)
<?php
// home.php - 子模板文件
require_once 'layout.php';
// 调用布局函数,传入标题和内容
layout('首页', function() {
?>
<h2>这是首页内容</h2>
<p>欢迎来到我的网站。</p>
<?php
});
?>
输出效果: 浏览器访问 home.php 时,会渲染出包含头部、底部和中间内容的完整HTML页面。
优点: 无需引入任何外部库,纯原生PHP,性能极好。
缺点: 需要手动管理 require 和回调函数,对于复杂嵌套(如三级继承)不太方便。
使用专业模板引擎(推荐:Twig / Blade)
对于中大型项目,强烈建议使用模板引擎,它们提供了更优雅的继承语法。
使用 Twig(最流行)
安装: composer require twig/twig
布局文件(base.html.twig):
{# base.html.twig #}
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">{% block title %}默认标题{% endblock %}</title>
</head>
<body>
<header>
<h1>网站头部</h1>
</header>
<main>
{% block content %}{% endblock %}
</main>
<footer>
<p>网站底部</p>
</footer>
</body>
</html>
子模板(home.html.twig):
{# home.html.twig #}
{% extends "base.html.twig" %}
{% block title %}首页标题{% endblock %}
{% block content %}
<h2>首页内容</h2>
<p>欢迎来到我的网站。</p>
{% endblock %}
特点:
- 使用
extends和block关键字,语法简洁。 - 支持多重继承(子模板可再继承)。
- 自动HTML转义,安全性好。
使用 Blade(PHP框架 Laravel 内置)
如果你使用Laravel框架,Blade是其默认模板引擎,继承方式如下:
布局文件(layouts/app.blade.php):
<!-- layouts/app.blade.php -->
<!DOCTYPE html>
<html>
<head>@yield('title')</title>
</head>
<body>
@include('partials.header')
<div class="container">
@yield('content')
</div>
@include('partials.footer')
</body>
</html>
子视图(home.blade.php):
@extends('layouts.app')
@section('title', '首页')
@section('content')
<h2>首页内容</h2>
@endSection
特点:
- 使用
@extends和@section/@yield。 - 支持
@include引入公共部分(如头部、底部)。 - 支持组件和插槽。
使用 Smarty(经典但较老)
Smarty是PHP历史上非常流行的模板引擎,现在逐渐被Twig取代,但仍在使用。
布局:
{* base.tpl *}
<!DOCTYPE html>
<html>
<head>{block name=title}默认标题{/block}</title>
</head>
<body>
{block name=content}{/block}
</body>
</html>
子模板:
{extends file="base.tpl"}
{block name=title}首页{/block}
{block name=content}
<p>内容</p>
{/block}
如何选择?建议方案
| 项目情况 | 推荐方案 |
|---|---|
| 小型项目 / 性能敏感 | 原生PHP + 函数(方案一) |
| 中型及以上项目 / 团队协作 | Twig(方案二,最推荐) |
| 使用 Laravel 框架 | Blade(框架自带,无需选) |
| 接手遗留系统 | Smarty(如果项目已用) |
额外建议:保持代码分离
无论使用哪种方案,最佳实践是将模板文件放在单独的目录(如 templates/ 或 views/),与业务逻辑文件(*.php)完全分离,这样可以:
- 方便前端和后端工程师协作。
- 避免模板中混入复杂的PHP逻辑。
- 提高安全性(模板目录可设置为不可直接访问)。
选择适合你的项目规模和团队习惯的方案,模板继承就能很好地复用布局,提高开发效率。