本文目录导读:

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语法
- 性能好,无额外解析开销
- 灵活性高,可随意控制
缺点:
- 逻辑与表现分离不够彻底
- 缺少模板继承、部件等高级特性
- 模板中容易混入业务逻辑
最佳实践建议
- 严格分离:模板中只做展示,不做业务计算
- 始终转义:使用
e()函数或htmlspecialchars()进行输出转义 - 使用约定:统一变量命名和文件结构
- 缓存优化:对复杂模板结果进行缓存
对于项目较大的情况,建议使用成熟的模板引擎如 Twig 或 Blade,但如果只是简单页面或想要零依赖,原生PHP模板完全够用。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播