Очень простой в использовании механизм шаблонов PHP

задняя часть PHP MVC регулярное выражение

Что такое шаблонизатор

Как следует из названия, это инструмент для анализа шаблонов. Он родился, чтобы решить проблему mvc и реализовать разделение данных и отображения. Механизм шаблонов php имеет долгую историю, например, умный старший брат. Его используют очень немногие. В конце концов, mvc сейчас очень развит, и многие фреймворки имеют свои собственные шаблонизаторы. Например, ветка Symfony, лезвие Laravel.

Потеря производительности?

Когда впервые появились шаблонизаторы, многие люди сомневались в этом, думая, что это проблемы с производительностью. Но на самом деле в этом нет необходимости. В конце концов, механизм шаблонов компилируется только один раз, заменяет соответствующий синтаксис шаблона операторами php с использованием регулярных выражений, а затем сохраняет его в виде php-файла для выполнения задачи.Последующей операцией является загрузка php-файла. Более того, это всего лишь оценка того, существует ли скомпилированный файл. Незначительно для текущей скорости вычислений.

Зачем использовать шаблонизатор

1 Избавьтесь от громоздких php-тегов, тем самым улучшив читаемость кода
2 Отдельная обработка данных и отображение представления, представление отвечает только за отображение и базовое логическое суждение
3 Хорошо разделить представление и организовать структуру

Сравнение шаблонизаторов

Помимо цели, есть еще проблема, которую нельзя игнорировать, легко ли научиться.Если шаблонизатор нужно изучить за несколько часов, стоимость такого обучения слишком высока. Как инструмент, он должен быть простым и легким в освоении, а во-вторых, он должен отвечать потребностям и иметь совершенные функции.
Взгляните на использование более популярных шаблонизаторов

веточка, мне нравится его грамматика, ее легко понять, легко выучить

基本语法
{% for user in users %}
    * {{ user.name }}
{% else %}
    No users have been found.
{% endfor %}

指定布局文件
{% extends "layout.html" %}
定义展示块
{% block content %}
    Content of the page...
{% endblock %}

посмотри на лезвие еще раз

<!-- 文件保存于 resources/views/layouts/app.blade.php -->

<html>
    <head>
        <title>应用程序名称 - @yield('title')</title>
    </head>
    <body>
       @section('sidebar')
            这是 master 的侧边栏。
        @show

        <div class="container">
            @yield('content')
        </div>
    </body>
</html>

<!-- Stored in resources/views/child.blade.php -->

@extends('layouts.app')

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

@section('sidebar')
    @parent

    <p>This is appended to the master sidebar.</p>
@endsection

@section('content')
    <p>This is my body content.</p>
@endsection

Как видно выше, лезвие гораздо сложнее ветки, если не читать описание, то не понять смысл приведенного выше кода. Почему не умничали, ведь это сложнее и меньше людей сейчас им пользуются.

Резюмируем следующее, шаблонизатор должен иметь следующие функции
1 блок/раздел блока данных Это очень мощная функция, позволяющая гибко управлять каждым блоком отображения.
2 Механизм наследования родительский Используйте наследование родительского элемента для вызова блока содержимого в макете
3 Комбинация нескольких файлов. Включение Используйте включение для объединения нескольких шаблонов для повторного использования кода в различных сценариях.
4 Гибкие переменные функции и постоянное использование
5 Элегантное логическое управление надписями. Вы можете в полной мере воспользоваться подсказками кода и функциями автодополнения программного обеспечения IDE без установки специальных плагинов.
6 Автоматический мониторинг шаблона. Когда шаблон будет обновлен, обновите страницу, механизм шаблонов автоматически скомпилирует и отобразит последний контент.

Сегодняшний главный герой

Исходя из того, что все функции, описанные выше, давайте посмотрим, как сегодняшний главный герой решает две сложные проблемы: легкость в освоении и удобочитаемость.

макет

<!--布局文件的代码-->

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title><block title>默认标题</block></title>
</head>
<body>
<!--展示块定义-->
<block content>我是布局模板content</block>
<!--引入模板-->
<include footer></include>
</body>
</html>

<!--内容模板-->

<!--展示块定义,会覆盖布局中的站位-->
<block title>{{ $title }}</block>
<block content>
    我是内容模板,但是我用parent标签,调用了布局文件中content的内容<br>
    <parent content></parent>
</block>

Разве это не так освежает. Определите различные теги блоков, чтобы гибко управлять содержимым и положением.Содержимое шаблона содержимого по умолчанию будет охватывать один и тот же блок файла макета. Вы также можете вызвать содержимое в файле макета с помощью родительского тега в шаблоне содержимого.

Использование тегов html для написания кода может привести к неполному коду во всех программах IDE. Приведенный выше код реализует определение блока представления, блок представления шаблона содержимого переопределяет шаблон макета, а также наследование и внешнее введение включения.

Использование переменных констант функций

Конечно, помимо общего управления шаблоном, в шаблоне должен быть контроль процесса и переменный вывод.

//变量
{{ $title }}
// 函数
{{ date('Y-m-d') }}
//普通常量跟变量用法一致,需要用{{}}括起来
{{ CONST_VAR }} 

//两边下划线的常量直接使用
//会翻译为< ?php if(defined('__APP__')){echo __APP__;}else{echo '__APP__';} ?>
__APP__ 

// 三目运算
{{ $a==0 ? 0 : 1 }}

Контроль процесса

если суждение

        <if ($var>1)>
            大于1
        <elseif ($var==1)>
           等于1
        <else/>
            小于1
        </if>

для цикла


        <for ($i=0;$i<5;$i++)>
            {{ $i }}
        </for>
        普通当然for循环

for in


        <for $item in $array>
            {{ $item['title'] }}
        </for>
        相当于foreach($array as $item)

        <for ($item,$index) in $array>
            {{ $index }}=>{{ $item['title'] }}
        </for>
        相当于foreach($array as $index=>$item)

Foreach соответствует исходному написанию php, но заменен формой тега php.

        <foreach ($array as $item)>
            {{ $item['title'] }}
        </foreach>
        <foreach ($array as $index=>$item)>
            {{ $index }}=>{{ $item['title'] }}
        </foreach>

Инициализировать в 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();

Как друзья приветствуют звездуGitHub.com/shook E/temp…