php 模板 {{}},PHP模板技术
当我第一次见到php模板的时候,简直被迷上了。原来php世界里还有这么好的东西。我疯狂地学习。
好在当时的php模板还不是很庞大,很快我了解了它的原理,并也能自己写一些了。
后来,smarty横空出世,更是拥有了许多为它着迷的fans.许多人开始写模板引擎,将smarty或其他模板加以改造,使之符合自己的需要。
纵观当今模板世界,php模板引擎主要分为两种:
一种是替换特定字串型的。美工做出来的页面,中间会嵌入一些什么{block.title}这样的字符串,然后程序读入这个模板文件,将中间的{block.title}的字样替换成实际从数据库中读取的内容。
还 有一种符杂一些,是一种编译型的。以smarty为代表,模板文件中实际上包含了一些简化的php代码,比如有的写的是< {=$site_name}>,0 }>这样的语句,实际是一种自行定义的语言格式。web开发久的人一眼能看出它们指的是什么。这一类往往会在第一次访问时被预编译,转换成一个 php文件何存起来。比如 就变成了,0 }> 就变成了0) {?>。从第二次起,就直接包含已经编译出来的php文件。当然,各种模板的处理的具体细节不一样。
但是,我们为什么要用模板?
这个问题我也不能很好的回答。但是有很多人这么说:要让美工和程序员的工作分开。要让代码层和表现层分开。
那么我们看这两种方式实现了吗?
让您的美工人员打开一个smarty文件,让他按他的思路去改一下视图设计。他会告诉您,天哪,你怎么把我的设计变成这样一幅样子了?这些foreach,if都是什么意思?噢,天哪,我的表格怎么撑得这么大了?….
原来编译型的模板技术让美工更没法子做美工了。
那 么替换字符串型的呢?看起来是轻松多了。不过您可以测测您的程序速度,看看他是否已经慢了一倍以上。很容易,您用了太多的有preg_match,或是 str_ireplace之类的语句来替换。程序重复一次又一次在您那几万个甚至更多字节的模板文件中查找某个字串,来替换内容。
不仅如此,你还发现您哪天想在视层面插一点东西时,处处受制于模板。您肯定很想直接在模板中写一段之类的语句,但是,很抱歉,您不能这么写。如果只是想echo 一个什么东西,您可以在模板中加一个`var`的串,然后在php程序中写
$var=”这一个串”;
$template->assign(”var”,$var);
但是如果您不是想输出呢,想做其他操作?抱歉,您还是得改php代码。这些模板都支持规矩矩的表格状的输出,但是,如果我想输出20条记录,我要弄一个第一行2列记录的,第二行3列的,第三行又是2行的之类的,或者是其他类似找码,您打算怎么办?
难道再让您的模板引擎也升级成为编译性的,好让您往您的模板中加入php语句?
您 错了。其实,我们看一看,我们的模板引擎充当了什么样的角色呢?我们把一段特定的按一定规则编写的html代码进行一定的数据处理后输出成了另外 一段,输出过程中某些字符发生了改变。那我们的伟大的php干了什么呢?它帮我们把我们按规则写好的php代码也按一定规则输出成了一段html。两者本 质是一样的。只是,php本身比我们那些蹩脚的模板引擎更快,更漂亮。
再说细一点,现在用的最多的Smarty.看一看它的结构:
echo art_constant("MD_RATE");:
/
你觉得它是一个美工能看清的html文件么?
看看编译后的结果,它看起来应该是这样的:
if($articles.rates){
?>
<?php echo art_constant("MD_RATE");?>:
<?php echo $article.rating;?>/<?php echo article.rates;?>
}?>
哈。我们伟大的smarty把这html也变成了php了。然后在以后的工作中,这些php代码会直接被运行。
有必要吗?本来是apache承载php,php直接编译php 源代码,现在变成了apache承载php,php编译smarty引擎,smarty引擎又去编译html文件。反而多了一层,smarty自个儿把本来php要做的工作拿了做了。
而且糟糕的是,smarty的模板打开来以后,比php文件更让人难以看清。
所以我说,放弃您的模板系统吧。但记住我们开发模板系统的初衷。
您会说:那要是放弃模板系统了,我怎么分开程序逻辑和视图层面?
这个也太好办了。您可以这样写:
第一个文件这样写:
/**
file :logic.php
@author renlu xu
@link http://www.162cm.com
*/
$rs=mysql_query("select id,title,body from articles order by id desc limit 30");
while($row=$mysql_fetch_assoc($rs))
{
$rows[]=$row;
}
?>
第 二个文件作为您的视层面的文件。您可以让您的平面设计师在mac上设计漂亮绝顶的图片,然后切成html文件,交给您的页面整合工程师。这个工程 不需要懂太多php,他基本上只需要会用print就行了。他把这个html文件改名为view.php,然后在里面加上相应代码:
/**
file:view.php
@author renlu xu
@link http://www.162cm.com
*/
foreach($rows as $row)
{
echo "
";
echo "
";
echo $row["id"];
echo "
";
echo "
";
echo $row["title"];
echo "
";
echo "
";
}
?>
ok.这就视层面文件。这个文件用织梦者(dreamweaver)打开后,应该跟美工做出来的图是一样的,就仅仅多了用那个黄色的问号代表的php代码。写得好时,dreamweaver还能列出您的php代码中输出了什么内容,效果更佳。
这两个文件,就是一个是逻辑层,一个是视层面。
然后用index.php将他们包含起来。
/**
file:index.php
@author renlu xu
@link http://www.162cm.com
*/
include "databaseConnect.php";//连接数据库的代码,我就不写了
include "logic.php";
include "view.php";
include "cache.php";
?>
这样逻辑和视,就分开了。那有人会说,如果我用模板,可以将要输出的内容写入到静态文件中,现在没了模板我该怎么办?
这个不是问题。我们用的是php,超酷的php.
看看,我们加了cache.php.这就是用来实现您说的缓存效果的。
我们的cache文件:
/**
file:cache.php
@author renlu xu
@link http://www.162cm.com
*/
$content=ob_get_content();
$fp=fopen("index.html","w");
fwrite($fp,$content);
fclose($fp);
?>
当然,index.php也改成:
/**
file:index.php
@author renlu xu
@link http://www.162cm.com
*/
if(file_exists("index.html"))
{
include "index.html";
exit();
}
include "databaseConnect.php";//连接数据库的代码,我就不写了
include "logic.php";
include "view.php";
incldue "cache.php";
?>
这样您看这缓存效果是不是就出来了?
有 人说:我用模板还有一个好处啊,就是模板写错了还不会影响到程序的运行。是的。咳,怎么说呢?您在模板中将是没啥,您的php程序还是很”健壮”地运行着。不过您没觉得,当您期望的那一个将由& lt;{=$site_name}>来打出来的网站名称没有出现的时候,您排起错来会很难找吗?对于一个程序师来说,您不觉得,光只视层面的那些 echo语句,只应该是您工作中极微不足道的一部分吗?在这个主要是echo语句构成的视层面文件view.php,您还出现编译期错误,是不是该拉出去 打屁屁?
另外,在php程序正式上线运行时,您也可以将它的报错功能关闭啊。
php 模板 {{}},PHP模板技术相关推荐
- C++基础——关于模板的技巧性基础知识(typename、成员模板、模板的模板参数)
typename template 成员模板 模板的模板 模板的模板 的实参匹配 本文继续深入探讨模板的基础知识,covers 内容如下: 关键字typename的另一种用法 将成员函数和嵌套类也定义 ...
- 1分钟理清楚C++类模板和模板类区别
目录 1.定义区别 2.程序举例 1.定义区别 类模板和模板类主要关注点是后一个单词. 类模板:主要描述的是模板,这个模板是类的模板.可以理解为一个通用的类,这个类中的数据成员,成员函数的形参类型以及 ...
- 笔记②:牛客校招冲刺集训营---C++工程师(面向对象(友元、运算符重载、继承、多态) -- 内存管理 -- 名称空间、模板(类模板/函数模板) -- STL)
0618 C++工程师 第5章 高频考点与真题精讲 5.1 指针 & 5.2 函数 5.3 面向对象(和5.4.5.5共三次直播课) 5.3.1 - 5.3.11 5.3.12-14 友元 友 ...
- 交警队门户网站管理系统-蓝色模板 v2020.7.14 专为交警队设计的一套模板,模板风格大气实用。整站布局,调整方便,适合全国各地交警内部网络和互联网建站使用。
介绍 宁志交警队网站管理系统-蓝色模板为基于宁志公安网站管理系统核心程序,专为交警队设计的一套模板,模板风格大气实用.整站布局,调整方便,适合全国各地交警内部网络和互联网建站使用. 宁志网站管理系统是 ...
- ajax商城模板,AJAX模板
$.ajax({ type:"",//Ajax请求的提交方式(GET或POST) dataType:"text",//请求的类型 url:"" ...
- C++笔记7:C++提高编程1:模板—[函数模板和类模板]
0820 C++提高编程: 1.模板-[函数模板和类模板] 2.初识STL 3.STL-常用容器 4.STL-函数对象 5.STL-常用算法 C++提高编程引言: C++除了面向对象编程思想,还有泛型 ...
- C++知识点59——类模板(4、类模板的模板参数是一个类模板)
接上一篇文章https://blog.csdn.net/Master_Cui/article/details/111824152 七.类模板的模板参数是一个模板类 类模板的模板参数本身可以是一个类模板 ...
- 记录一下HALCON基于可变形,利用CAD画dxf模板进行模板匹配(二)
本文接着上一篇记录一下HALCON基于可变形,利用CAD画dxf模板进行模板匹配 打开HALCON并打开匹配助手 匹配助手如图 "创建"页说明: 1,选择匹配方式 中间偏上方的下拉 ...
- Xamarin XAML语言教程控件模板的模板绑定
Xamarin XAML语言教程控件模板的模板绑定 控件模板的模板绑定 为了可以轻松更改控件模板中控件上的属性值,可以在控件模板中实现模板绑定功能.模板绑定允许控件模板中的控件将数据绑定到公共属性上. ...
- 【C++ 语言】面向对象 ( 模板编程 | 函数模板 | 类模板 )
文章目录 函数模板 类模板 代码示例 函数模板 1. 模板编程 : 类似于 Java 中的泛型编程 ; ① 函数模板 : 对应着 Java 中的泛型方法 ; ② 类模板 : 对应 Java 中的泛型类 ...
最新文章
- 看完 50000 张专辑封面后,AI 设计师疯狂输出
- MongoDB数据库使用总结
- Java Service Wrapper
- 漫画:什么是Base64算法
- 存根类 测试代码 java_测试双打:模拟,假人和存根
- oracle insert select 大 批量 数据_芬兰 Vaisala维萨拉 HM70手持式温湿度表 型号:FL15/HM70+HMP75【北京中西华大吧】...
- F5 虚拟机下载 和 试用Key 申请
- bzoj 1202: [HNOI2005]狡猾的商人(带权并查集)
- 【设计模式】之单例模式
- Linux基础软件威胁疑云:从已知到“未知”
- Word中如何设置论文中的公式与序号
- 五邑大学计算机学院奖学金,关于开展2019-2020学年度学生综合测评和奖学金评定工作的通知...
- 最全的CDR抠图教程
- Hyperledger Fabric 2.3环境配置搭建指南及BUG记录
- gabor滤波 matlab,图像处理 – 使用matlab应用Gabor方程创建Gabor滤波器
- CS224W-图神经网络 笔记5.3:Spectral Clustering - 谱图聚类的具体操作步骤
- ES更改默认分片数量及副本
- 描述CFAR算法原理
- StringBuffer和StringBuilder
- Artificial Intelligence A Modern Approach 第二版笔记(一)
热门文章
- linux编译 mb_string,linux mb()/rmb()/wmb()
- python网课 知乎_如何看待风变编程的 Python 网课
- java 开源论坛框架/java web 论坛框架
- AES16位密钥加密解密
- Intellij IDEA创建Scala项目
- 如何做好百度竞价推广?
- 获取购买到的淘宝商品订单详情API接口,买家订单API接口,买家订单详情API接口
- 《互联网周刊》发布2019快时尚品牌排行榜
- 使用john破解密码
- 鼠标计算机英语怎么说,鼠标英语