好用的php模板,非常好用的PHP模板引擎

什么是模板引擎

顾名思义,这是个模板解析的工具。他是为了解决mvc,实现数据和展示分离问题而产生的。php模板引擎由来已久,比如老大哥smarty。已经很少有人用了。毕竟现在mvc已经很成熟,很多框架都有自己的模板引擎。比如Symfony的twig,Laravel的blade。

性能损耗?

模板引擎开始出现的时候,有很多人质疑,认为有性能问题。但其实这是没有必要的。毕竟模板引擎只是编译一次,把相应的模板语法利用正则替换成php语句,然后存储成php文件就完成任务了,后续的运行其实是载入php文件。多出来的仅仅是一个是否存在编译文件的判断而已。对于现在的计算速度来说可以忽略。

为什么要用模板引擎

1 从繁琐的php标签中脱离出来,从而提高代码的可读性

2 将数据处理和视图展示分离,视图只负责展示和基本的逻辑判断

3 很好的进行视图拆分,组织结构

模板引擎比较

除了目的,还有一个不可忽视的问题,是否易学,如果一个模板引擎需要用几个小时去学习,那这样的学习成本太高了。作为一个工具应该简单易学,其次是能满足需求,功能要完善。

看一下比较主流的模板引擎的使用

twig,他的使用语法我比较喜欢,很容易看懂,简单易学

基本语法

{% for user in users %}

* {{ user.name }}

{% else %}

No users have been found.

{% endfor %}

指定布局文件

{% extends "layout.html" %}

定义展示块

{% block content %}

Content of the page...

{% endblock %}复制代码

再看看blade

应用程序名称 - @yield('title')

@section('sidebar')

这是 master 的侧边栏。

@show

@yield('content')

@extends('layouts.app')

@section('title', 'Page Title')

@section('sidebar')

@parent

This is appended to the master sidebar.

@endsection

@section('content')

This is my body content.

@endsection复制代码

上面可以看出,blade就比twig复杂多了,如果不看说明,你没法理解上面代码的意思。为什么没有累出smarty,因为它更复杂,现在使用的人也比较少了。

我们总结以下,一个模板引擎应该具备以下功能

1 数据块block/section 这是一个很强大的功能,可以灵活的控制每一个展示块

2 继承机制parent 使用parent继承调用布局中的内容块

3 多文件组合include 利用include可以将多个模板组合到一起,实现多种不同场景下的代码复用

4 灵活的变量函数以及常量使用

5 优雅的标签逻辑控制 你可以充分利用ide软件的代码提示和自动完成功能,而不需要安装特殊插件

6 模板自动监听 当模板更新时,刷新页面,模板引擎会自动进行编译,展示最新内容

今天的主角

在具有上面总结的所有功能的前提下,看看今天的主角是怎么解决易学,可读这两个难题的。

布局

默认标题

我是布局模板content

{{ $title }}

我是内容模板,但是我用parent标签,调用了布局文件中content的内容

复制代码

是不是清爽至极。定义不同的block标签,灵活的控制内容和位置,内容模板的内容会默认覆盖布局文件的相同block块。还可以在内容模板,用parent标签调用布局文件中的内容。

使用html标签的方式进行代码书写,可以在所有ide软件中实现代码不全。上面的代码实现了展示块定义,内容模板展示块覆盖布局模板,以及继承和,外部引入include。

变量 常量 函数的使用

当然,除了对模板的总体管理,模板中还要有流程控制和变量输出。

//变量

{{ $title }}

// 函数

{{ date('Y-m-d') }}

//普通常量跟变量用法一致,需要用{{}}括起来

{{ CONST_VAR }}

//两边下划线的常量直接使用

//会翻译为< ?php if(defined('__APP__')){echo __APP__;}else{echo '__APP__';} ?>

__APP__

// 三目运算

{{ $a==0 ? 0 : 1 }}复制代码

流程控制

if判断

1)>

大于1

等于1

小于1

复制代码

for循环

{{ $i }}

普通当然for循环复制代码

for in

{{ $item['title'] }}

相当于foreach($array as $item)

{{ $index }}=>{{ $item['title'] }}

相当于foreach($array as $index=>$item)复制代码

foreach 跟源生php写法对应只是换成了php标签形式

{{ $item['title'] }}

$item)>

{{ $index }}=>{{ $item['title'] }}

复制代码

php中初始化include "../Template.php";

$view = new Template();

$view->templatePath = './template/';// 模板路径 最后以/结尾

$view->compilePath = './compile/';// 编译文件存放路径 最后以/结尾

$view->layout = 'layout';// 布局文件在末班目录下,如果不适用可以定义成空字符串或false

// 渲染模板

$view->render('index',[

'title'=>'测试页',

'content'=>'内容',

'array'=>[

1,2,3

]

]);

//清空缓存

//$view->clean();复制代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值