模板化应用重复输出
在进行PHP开发中,或许我们常常会与foreach循环输出打交道。
举例说,PHP从数据库中读取10条最新新闻,存在数据库$news_list中,通常,在以往的PHP程序编写中,我们常常PHP代码襄套进HTML代码中,这样虽然方便,但是不利于直观的设计,不便于后期的维护。现在普遍使用模板引擎将代码与显示分离,比如Smarty。可以让我们将程序与前端代码分离。更直观,更易于后期维护更改。
以往我们喜欢这样:
<ul>
<?php
foreach($news_list as $news){
?>
<li><a href=”news.php?id=<?=$news['id']?>”><?=$news['title']?></a></li>
<?
}
?>
</ul>
现在,我们让他们分离:
<?php
$news_html = repeat_out($news_list, ‘<li><a href=”news.php?id={$id}”>{$title}</a></li>’);
function repeat_out($arr, $tpl){
$html = ”;
foreach ($array as $arr){
if (is_array($arr)){
foreach ($arr as $key=>$val){
$$key = $val;
}
}else {
$value = $arr;
}
eval(“\$html.=\”{$tpl}\r\n\”;”);
}
return $html;
}
?>
仅供参考,不知道eval的效率要比直接字符串处理要低很多。下面是个Benchmark的结果:
———————–一万次eval和字符串处理的耗时结果——————–
10,000 Times ’string’ Time Spent(s):
0.0074520111084
10,000 Times ‘eval’ Time Spent(s):
0.101042032242
————————-百万次eval和字符串处理的耗时结果——————-
1,000,000 Times ‘String’ Time Spent(s):
0.780632972717
1,000,000 Times ‘eval’ Time Spent(s):
6.93951201439
不出所料的,eval由于要处理变量转化语句等,其耗时会超过直接字符串处理十倍左右。但是对于常见应用来说,这耗时其实也并不算高。


欢迎订阅:
最新评论
热评文章