PHP原生模板怎么用

wen PHP项目 4

本文目录导读:

PHP原生模板怎么用

  1. 基础PHP模板(最常用)
  2. 使用函数封装模板
  3. 模板循环与条件判断
  4. 模板继承(简单实现)
  5. 使用 include/require 进行模块化
  6. 安全注意事项
  7. 完整示例:简单博客模板
  8. 优点和缺点
  9. 最佳实践建议

PHP原生模板指的是直接用PHP本身作为模板引擎(不使用Twig、Blade等第三方模板库),以下是几种常见的使用方式:

基础PHP模板(最常用)

分离HTML和PHP逻辑

模板文件 template.php

<?php
// 接收变量(在模板顶部定义)
$title = $title ?? '默认标题';
$content = $content ?? '';
?>
<!DOCTYPE html>
<html>
<head><?php echo htmlspecialchars($title); ?></title>
</head>
<body>
    <h1><?php echo htmlspecialchars($title); ?></h1>
    <div class="content">
        <?php echo $content; ?>
    </div>
</body>
</html>

调用模板

<?php
// 准备数据
$data = [ => '我的页面',
    'content' => '<p>这是内容</p>'
];
// 加载模板(推荐使用 extract)
extract($data);
include 'template.php';
?>

使用函数封装模板

<?php
function render_template($template, $data = []) {
    // 开启输出缓冲
    ob_start();
    // 提取变量到当前作用域
    extract($data);
    // 包含模板文件
    include $template . '.php';
    // 获取缓冲区内容并清理
    return ob_get_clean();
}
// 使用
$html = render_template('template', [ => '我的标题',
    'items' => ['苹果', '香蕉', '橙子']
]);
echo $html;
?>

模板循环与条件判断

模板文件 list_template.php

<?php
$items = $items ?? [];
$showEmpty = empty($items) ? ' style="display:none"' : '';
?>
<div class="list">
    <?php if (empty($items)): ?>
        <p>暂无数据</p>
    <?php else: ?>
        <ul>
            <?php foreach ($items as $item): ?>
                <li><?php echo htmlspecialchars($item); ?></li>
            <?php endforeach; ?>
        </ul>
    <?php endif; ?>
</div>

模板继承(简单实现)

<?php
// 布局文件 layout.php
function layout($content, $title = '') {
    return <<<HTML
<!DOCTYPE html>
<html>
<head>{$title}</title>
</head>
<body>
    <header>网站头部</header>
    <main>{$content}</main>
    <footer>网站底部</footer>
</body>
</html>
HTML;
}
// 页面文件
$pageContent = '<h1>页面内容</h1><p>正文...</p>';
echo layout($pageContent, '我的页面');
?>

使用 include/require 进行模块化

<?php
// header.php
function header_template() {
    ?>
    <header>
        <nav>
            <ul>
                <li><a href="/">首页</a></li>
                <li><a href="/about">lt;/a></li>
            </ul>
        </nav>
    </header>
    <?php
}
?>
<?php
// page.php
include 'header.php';
header_template();
?>
<main>
    <h1>主内容</h1>
</main>
<?php include 'footer.php'; ?>

安全注意事项

<?php
// 转义输出
function e($string) {
    return htmlspecialchars($string, ENT_QUOTES, 'UTF-8');
}
// 使用
echo e($userInput); // 而不是直接 echo $userInput
?>

完整示例:简单博客模板

<?php
// blog_template.php
function render_blog($posts, $options = []) {
    ob_start();
    ?>
    <div class="blog-posts">
        <?php foreach ($posts as $post): ?>
            <article class="post">
                <h2>
                    <a href="/post/<?php echo $post['slug']; ?>">
                        <?php echo e($post['title']); ?>
                    </a>
                </h2>
                <div class="meta">
                    <span>作者: <?php echo e($post['author']); ?></span>
                    <span>日期: <?php echo date('Y-m-d', strtotime($post['date'])); ?></span>
                </div>
                <div class="excerpt">
                    <?php echo nl2br(e($post['excerpt'])); ?>
                </div>
                <a href="/post/<?php echo $post['slug']; ?>" class="read-more">阅读更多</a>
            </article>
        <?php endforeach; ?>
    </div>
    <?php
    return ob_get_clean();
}
// 使用
$posts = [
    ['slug' => 'hello-world', 'title' => 'Hello World', 'author' => '张三', 'date' => '2023-01-01', 'excerpt' => '这是我第一篇博客'],
    ['slug' => 'php-tips', 'title' => 'PHP Tips', 'author' => '李四', 'date' => '2023-01-02', 'excerpt' => '一些PHP技巧']
];
echo render_blog($posts);
?>

优点和缺点

优点:

  • 不需要额外学习,直接使用PHP语法
  • 性能好,无额外解析开销
  • 灵活性高,可随意控制

缺点:

  • 逻辑与表现分离不够彻底
  • 缺少模板继承、部件等高级特性
  • 模板中容易混入业务逻辑

最佳实践建议

  1. 严格分离:模板中只做展示,不做业务计算
  2. 始终转义:使用 e() 函数或 htmlspecialchars() 进行输出转义
  3. 使用约定:统一变量命名和文件结构
  4. 缓存优化:对复杂模板结果进行缓存

对于项目较大的情况,建议使用成熟的模板引擎如 Twig 或 Blade,但如果只是简单页面或想要零依赖,原生PHP模板完全够用。

抱歉,评论功能暂时关闭!