构建自己的PHP框架--构建模版引擎(1)
前段时间太忙,导致好久都没有更新博客了,今天抽出点时间来写一篇。
其实这个系列的博客很久没有更新了,之前想好好规划一下,再继续写,然后就放下了,今天再捡起来继续更新。
今天我们来说一下,如何构建自己的 PHP 模版引擎。现在比较流行的 PHP 模版引擎有Twig、Haml、Liquid、Mustache、Plates、Blade以及比较古老的Smarty
其实关于PHP应不应该使用模版引擎,网上也有不少争论,在这里罗列一些使用模版引擎的优点。
- 安全,比如默认转义输出
- 可读性好
相关内容可以参考一下知乎的讨论
首先末来确定一下思路,我们先要确定在模版中使用怎样的写法,参考 Laravel 的 Blade 模板,定义如下几种简单的写法。
- 输出变量值
{{ }} 表达式的返回值将被自动传递给 PHP 的 htmlentities 函数进行处理,以防止 XSS 攻击。
Hello, {{ $name }}!
- 输出未转义的变量值
Hello, {!! $name !!}!
- If 表达式
通过 @if、@elseif、@else 和 @endif 指令可以创建 if 表达式。
@if (count($records) === 1)
I have one record!
@elseif (count($records) > 1)
I have multiple records!
@else
I don't have any records!
@endif
- 循环
@for ($i = 0; $i < 10; $i++)
The current value is {{ $i }}
@endfor
@foreach ($users as $user)
<p>This is user {{ $user->id }}</p>
@endforeach
@while (true)
<p>I'm looping forever.</p>
@endwhile
- 引入其他视图
@include('view.name', ['some' => 'data'])
暂时先定义这么多,基本够用。如果有特殊的需要,可以自己添加,其原理基本是一致的,会写一个,其他的就都能写出来。
然后再考虑如何处理,我们定义出了这样的写法,PHP 是识别不了的,我们需要将它转化成 PHP 能够识别的样子。
举个最简单的例子,当我们拿到{{ $name }}
这样一段内容时,我们只需要将它转化成<?php echo $name?>
这样,就可以识别了,输出相应的变量值。
是不是很简单,好像只需要用正则替换一下就可以了,具体实现我在下一篇文章中继续说~
然后我们还有考虑到性能,每次我们都要做这样的转化,是不是很耗性能,我们可以每次都将转化后的结果缓存起来,当文件发生变化后,再重新转化,这样是不是就解决了一部分性能的问题~~
好了,今天就先到这里。项目内容和博客内容也都会放到Github上,欢迎大家提建议。
code:https://github.com/CraryPrimitiveMan/simple-framework/tree/1.0
blog project:https://github.com/CraryPrimitiveMan/create-your-own-php-framework
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
2014-10-30 PHP的学习--PHP加密