模版引擎 smarty 怎样工作的 学习感悟 foreach
2012-09-05 11:50
232 查看
我没有仔细看smrty内部到底是怎么写的只是用了之后根据自己的想法,感觉是这样的,写点东西。当然只是针对foreach这一个函数,如果有错误希望您能提出来,因为这会给我莫大的帮助!!
关于 smarty内部是如何解析这些代码的一直都是我的困惑,我想以这个为例:
<{ foreach from = $arr1 item = temp }>
<{ $temp }>
<{/foreach }>
“<{ }>"是自己定义的分隔符号。(假使$arr1是一个简单的一位数组. ) 这些都是模版文件tpl中的内容,这个foreach只是其中的一小段内容,我现在只分析foreach,因为其他内容我还没想太明白……觉得前人真是思 维很缜密,会想到将foreach中的两个值用from和item来标记…………
一、首先,提取文件流中所有标记符之间的数据,并存入一个数组:$arr中
2.循环遍历数组,并比对每一个字符串中是否包含foreach关键字或者其他关键字。比如:
$arr[0]=" foreach from = $arr1 item = temp "
$arr[1]=" $temp "
$arr[2]="/foreach"
首先判断arr[0],包含foreach,则将$arr[0]中“from = ”后面但是“item”前的内容“$arr1”提取出来,存入数组str【0】,再将"item = "后的内容提取出来,存入str[1],然后将这些数组拼合成一个新的数组str,
则str="<?php foreach("+str[0]+"as $"+str[1]+"){ ?>",将该串替换$arr[0]所在字符流中的位置,即
原内容变成:<?php foreach($arr1 as $temp){ ?>
二、继续遍历arr[1],
由于只有变量标识符$,我想即使是$temp变成比较语句、赋值语句,也应该直接输出,因为这些都将写入文件中,不需要得出结果,所以替换成:<?php echo "$temp"; ?>
前两句合起来就是:
<?php foreach($arr1 as $temp){ ?>
<?php echo "$temp"; ?>
三、继续遍历arr【2】
由于遇到了/foreach符号,所以输出:“}”符号,可是 当我们使用if elseif 以及else的时候,在碰到/if时应该输出几个“}”呢?我想在碰到elseif及else时要提前输出“}”来确保上一个符号被关闭。则,替换完成后,成为这样子:
<?php foreach($arr1 as $temp){ ?>
<?php echo "$temp"; ?>
<?php } ?>
(去掉碍眼的php标记,就是:
foreach($arr1 as $temp){
echo "$temp";
}
这样就很清晰了。)
这样再将替换完成的流输出至文件…….php,并调用该文件。ok完了!!!!
关于 smarty内部是如何解析这些代码的一直都是我的困惑,我想以这个为例:
<{ foreach from = $arr1 item = temp }>
<{ $temp }>
<{/foreach }>
“<{ }>"是自己定义的分隔符号。(假使$arr1是一个简单的一位数组. ) 这些都是模版文件tpl中的内容,这个foreach只是其中的一小段内容,我现在只分析foreach,因为其他内容我还没想太明白……觉得前人真是思 维很缜密,会想到将foreach中的两个值用from和item来标记…………
一、首先,提取文件流中所有标记符之间的数据,并存入一个数组:$arr中
2.循环遍历数组,并比对每一个字符串中是否包含foreach关键字或者其他关键字。比如:
$arr[0]=" foreach from = $arr1 item = temp "
$arr[1]=" $temp "
$arr[2]="/foreach"
首先判断arr[0],包含foreach,则将$arr[0]中“from = ”后面但是“item”前的内容“$arr1”提取出来,存入数组str【0】,再将"item = "后的内容提取出来,存入str[1],然后将这些数组拼合成一个新的数组str,
则str="<?php foreach("+str[0]+"as $"+str[1]+"){ ?>",将该串替换$arr[0]所在字符流中的位置,即
原内容变成:<?php foreach($arr1 as $temp){ ?>
二、继续遍历arr[1],
由于只有变量标识符$,我想即使是$temp变成比较语句、赋值语句,也应该直接输出,因为这些都将写入文件中,不需要得出结果,所以替换成:<?php echo "$temp"; ?>
前两句合起来就是:
<?php foreach($arr1 as $temp){ ?>
<?php echo "$temp"; ?>
三、继续遍历arr【2】
由于遇到了/foreach符号,所以输出:“}”符号,可是 当我们使用if elseif 以及else的时候,在碰到/if时应该输出几个“}”呢?我想在碰到elseif及else时要提前输出“}”来确保上一个符号被关闭。则,替换完成后,成为这样子:
<?php foreach($arr1 as $temp){ ?>
<?php echo "$temp"; ?>
<?php } ?>
(去掉碍眼的php标记,就是:
foreach($arr1 as $temp){
echo "$temp";
}
这样就很清晰了。)
这样再将替换完成的流输出至文件…….php,并调用该文件。ok完了!!!!
相关文章推荐
- 模版引擎 smarty 怎样工作的 学习感悟 foreach
- 模版引擎 smarty 怎样工作的 学习感悟 foreach
- 模版引擎 smarty 怎样工作的 学习感悟 foreach
- 怎样学习4.0?(工作后学习中的学习感悟)
- php模版引擎(smarty3)—优化(选择注释)
- 浏览器是怎样工作的:渲染引擎,HTML解析
- php smarty模版引擎中的缓存应用
- 浏览器是怎样工作的:渲染引擎,HTML解析
- 关于驰骋工作流程引擎,工作流程管理系统演示与学习环境发布的通知。
- 超级牛人在华为工作十年的感悟-值得小小程序猿学习
- 工作、找工作、面试、笔试、学习、感悟
- php smarty模版引擎中变量操作符及使用方法
- php模版引擎(smarty3)—display()渲染文本字符串
- HTML+CSS+jQuery 纵向导航 && 横向导航 && 消除IE6 BUG && 感悟怎样学习
- 怎样学好PHP.一位PHP大师的学习感悟(绝对精品)
- [转]浏览器是怎样工作的:渲染引擎,HTML解析
- Smarty模版引擎的一些基本知识点
- php smarty模版引擎中的缓存应用
- Express学习 ------模版引擎(handlebars)
- 浏览器是怎样工作的二:渲染引擎 HTML解析