当前位置:首页 > PHP

php原生模板引擎实现

2026-04-03 12:05:07PHP

PHP原生模板引擎实现

PHP本身支持直接嵌入HTML代码,但原生模板引擎可以更好地分离逻辑与视图。以下是几种实现方式:

使用PHP原生语法

PHP原生语法已经具备模板引擎的基础功能,通过<?php ?>标签嵌入逻辑:

<!DOCTYPE html>
<html>
<head>
    <title><?= htmlspecialchars($title) ?></title>
</head>
<body>
    <?php foreach ($items as $item): ?>
        <li><?= htmlspecialchars($item) ?></li>
    <?php endforeach; ?>
</body>
</html>

自定义简单模板引擎

通过ob_start()ob_get_clean()实现模板渲染:

php原生模板引擎实现

function renderTemplate($templatePath, $data = []) {
    extract($data);
    ob_start();
    include $templatePath;
    return ob_get_clean();
}

// 使用示例
$data = ['title' => 'Home', 'items' => ['Item 1', 'Item 2']];
echo renderTemplate('template.php', $data);

实现变量替换

通过字符串替换实现简单模板功能:

function renderTemplate($template, $data) {
    foreach ($data as $key => $value) {
        $template = str_replace("{{$key}}", htmlspecialchars($value), $template);
    }
    return $template;
}

// 使用示例
$template = '<h1>{title}</h1><p>{content}</p>';
$data = ['title' => 'Hello', 'content' => 'World'];
echo renderTemplate($template, $data);

支持条件判断和循环

扩展模板引擎以支持基本逻辑:

php原生模板引擎实现

function renderTemplate($template, $data) {
    extract($data);
    ob_start();
    eval('?>' . $template);
    return ob_get_clean();
}

// 使用示例
$template = <<<'TPL'
<?php if ($show): ?>
    <h1><?= $title ?></h1>
<?php endif; ?>
TPL;

$data = ['show' => true, 'title' => 'Dynamic Title'];
echo renderTemplate($template, $data);

模板继承

实现类似其他模板引擎的继承功能:

function extendTemplate($parent, $child) {
    ob_start();
    include $parent;
    $parentContent = ob_get_clean();

    ob_start();
    include $child;
    $childContent = ob_get_clean();

    return str_replace('@yield', $childContent, $parentContent);
}

// parent.php
// <html><body>@yield</body></html>

// child.php
// <h1>Content</h1>

安全注意事项

使用原生PHP模板时需注意:

  • 始终对输出进行转义:htmlspecialchars()
  • 避免直接执行用户提供的模板代码
  • 考虑使用strip_tags()过滤HTML标签

这些方法提供了从简单到相对复杂的PHP原生模板实现方案,可根据项目需求选择合适的方式。

标签: 模板引擎
分享给朋友:

相关文章

css网页制作模板

css网页制作模板

CSS 网页制作模板 CSS 网页制作模板通常包含基础的 HTML 结构和 CSS 样式,帮助快速搭建响应式、现代化的网页布局。以下是一个常见的模板示例,包含关键部分和优化建议。 基础 HTML 结…

vue实现打印模板

vue实现打印模板

Vue 实现打印模板的方法 在 Vue 中实现打印功能通常需要结合浏览器的打印 API 和 CSS 样式控制。以下是几种常见的方法: 使用 window.print() 方法 创建一个专门用于打印的…

CSS模板制作起泡

CSS模板制作起泡

气泡效果实现方法 气泡效果可以通过CSS的伪元素和边框属性实现。以下是一个常见的CSS气泡代码模板: .bubble { position: relative; background…

用css制作模板

用css制作模板

使用CSS创建模板的方法 CSS模板可以通过多种方式实现,以下是几种常见的方法: 定义基础样式 在CSS文件中设置全局样式,包括字体、颜色、间距等。例如: body { font-family…

php原生模板引擎实现

php原生模板引擎实现

PHP原生模板引擎实现 基本思路 PHP本身具备模板引擎的特性,通过混合HTML和PHP代码即可实现简单的模板功能。原生实现通常基于以下核心思想: 使用ob_start()和ob_get_clean…

uniapp模板库

uniapp模板库

uniapp模板库推荐 uniapp提供了丰富的模板库,可以帮助开发者快速搭建项目。以下是一些常用的模板库和资源: 官方模板 DCloud插件市场:提供大量官方和第三方开发的uniapp模…