PHP的模板引擎smarty原理
mvc是开发中的一个伟大的思想,使得开发代码有了更加清晰的层次,让代码分为了三层各施其职、无论是对代码的编写以及后期的阅读和维护,都提供了很大的便利。
我们在php开发中,视图层view是不允许有php代码来操作数据库之类的来获取数据的,我们一般都会在控制器层controller,就已经把视图层要展示的数据准备好,方便视图层直接用来展示。
smarty模板技术,可以让数据和视图进行分离,让视图中不能直接出现php代码。这样的话,让前段页面的开发和后台数据的开发,可以双管齐下,同时进行了。
smarty模板的使用比较简单,主要有两个非常核心的函数。一个是assig(),把模板中要使用的数据进行赋值,一个是display(),用来解析和展示最后的视图模板。
相关推荐:《PHP教程》
使用的简单代码如下:
include_once "Smarty.class.php";//引入smarty类 $smarty = new Smarty;//创建smarty对象 $smarty->assign("name","zhangmiao");//赋值,以备模板中使用 $smarty->assign("age","18"); $smarty->display('index.tpl');//引入模板,展示视图页面
我们看下模板源代码是这样的:
<h1>测试模板1</h1> 我的名字是:{$name}<br/> 我的年纪是:{$age}<br/>
浏览器页面是这样的:
疑问:我们模板中没有php代码,我们只用了{$name}和{$age}就能把对应的变量给展示了出来,是什么鬼呢?
然后,我们一看smarty编译后的文件是这样的:
<h1>测试模板1</h1> 我的名字是:<?php echo $this->var["name"]; ?><br/> 我的年纪是:<?php echo $this->var["age"]; ?><br/>
原来如此,最终还是变成了含有php代码的模板,但是这个模板中把标签转成php代码的工作,我们交给了smarty模板引擎来完成的。
那到底smarty模板引擎是怎么把模板里面的非php代码的标签,转变成被最终可以解析执行的php代码的呢?
主要思路是:替换。
分成了两步:
1、通过assign函数把要解析的标签变量赋值
2、通过display函数把标签替换成对象的php变量
我们根据这个思路,自己也写了个简易版的smarty模板引擎,算是多smarty模板引擎设计原理的一种理解。但是只能解析单个变量的标签,其他标签均没有处理。代码如下:
class MySmarty{ //模板存放路径 public $template = './template/'; //编译后模板路径 public $template_c = './template_c/'; //存放变量的数组,通过assign函数赋值 public $var = array(); //变量赋值 public function assign($vkey,$value){ if($vkey != ""){ $this->var[$vkey] = $value;//把要模板中解析的数据压入数组 } } //模板中变量替换 public function display($path){ $template_path = $this->template.$path; $template_c_path = $this->template_c.$path.".php"; if(!file_exists($template_path)){ return false; } //只有解析后的模板文件不存在或者模板源文件有新的改动的情况下 重新解析模板 if(!file_exists($template_c_path) || filemtime($template_path)>filemtime($template_c_path)){ //获取模板源文件,用来替换 $template_content = file_get_contents($template_path); $pattern = array( '/\{\s*\$([a-zA-Z][a-zA-Z0-9_]*)\s*\}/i' ); $replace = array( '<?php echo $this->var["${1}"]; ?>' ); //用正则去替换模板源文件中的变量符号{$varname} $res = preg_replace($pattern,$replace,$template_content); //编译后文件写入某个目录 file_put_contents($template_c_path,$res); } //引入编译后文件,其实就是执行了那个php文件的代码 include_once $template_c_path; } }
我们调用自己的assign和display放入引入,也能正常解析使用啦。
Atas ialah kandungan terperinci php模板引擎原理是什么. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

php把负数转为正整数的方法:1、使用abs()函数将负数转为正数,使用intval()函数对正数取整,转为正整数,语法“intval(abs($number))”;2、利用“~”位运算符将负数取反加一,语法“~$number + 1”。

实现方法:1、使用“sleep(延迟秒数)”语句,可延迟执行函数若干秒;2、使用“time_nanosleep(延迟秒数,延迟纳秒数)”语句,可延迟执行函数若干秒和纳秒;3、使用“time_sleep_until(time()+7)”语句。

php除以100保留两位小数的方法:1、利用“/”运算符进行除法运算,语法“数值 / 100”;2、使用“number_format(除法结果, 2)”或“sprintf("%.2f",除法结果)”语句进行四舍五入的处理值,并保留两位小数。

判断方法:1、使用“strtotime("年-月-日")”语句将给定的年月日转换为时间戳格式;2、用“date("z",时间戳)+1”语句计算指定时间戳是一年的第几天。date()返回的天数是从0开始计算的,因此真实天数需要在此基础上加1。

方法:1、用“str_replace(" ","其他字符",$str)”语句,可将nbsp符替换为其他字符;2、用“preg_replace("/(\s|\ \;||\xc2\xa0)/","其他字符",$str)”语句。

php判断有没有小数点的方法:1、使用“strpos(数字字符串,'.')”语法,如果返回小数点在字符串中第一次出现的位置,则有小数点;2、使用“strrpos(数字字符串,'.')”语句,如果返回小数点在字符串中最后一次出现的位置,则有。

在php中,可以使用substr()函数来读取字符串后几个字符,只需要将该函数的第二个参数设置为负值,第三个参数省略即可;语法为“substr(字符串,-n)”,表示读取从字符串结尾处向前数第n个字符开始,直到字符串结尾的全部字符。

php字符串有下标。在PHP中,下标不仅可以应用于数组和对象,还可应用于字符串,利用字符串的下标和中括号“[]”可以访问指定索引位置的字符,并对该字符进行读写,语法“字符串名[下标值]”;字符串的下标值(索引值)只能是整数类型,起始值为0。


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

DVWA
Damn Vulnerable Web App (DVWA) ialah aplikasi web PHP/MySQL yang sangat terdedah. Matlamat utamanya adalah untuk menjadi bantuan bagi profesional keselamatan untuk menguji kemahiran dan alatan mereka dalam persekitaran undang-undang, untuk membantu pembangun web lebih memahami proses mengamankan aplikasi web, dan untuk membantu guru/pelajar mengajar/belajar dalam persekitaran bilik darjah Aplikasi web keselamatan. Matlamat DVWA adalah untuk mempraktikkan beberapa kelemahan web yang paling biasa melalui antara muka yang mudah dan mudah, dengan pelbagai tahap kesukaran. Sila ambil perhatian bahawa perisian ini

SecLists
SecLists ialah rakan penguji keselamatan muktamad. Ia ialah koleksi pelbagai jenis senarai yang kerap digunakan semasa penilaian keselamatan, semuanya di satu tempat. SecLists membantu menjadikan ujian keselamatan lebih cekap dan produktif dengan menyediakan semua senarai yang mungkin diperlukan oleh penguji keselamatan dengan mudah. Jenis senarai termasuk nama pengguna, kata laluan, URL, muatan kabur, corak data sensitif, cangkerang web dan banyak lagi. Penguji hanya boleh menarik repositori ini ke mesin ujian baharu dan dia akan mempunyai akses kepada setiap jenis senarai yang dia perlukan.

Muat turun versi mac editor Atom
Editor sumber terbuka yang paling popular

ZendStudio 13.5.1 Mac
Persekitaran pembangunan bersepadu PHP yang berkuasa
