模板化应用重复输出

森森 2009-10-17 73 views

在进行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由于要处理变量转化语句等,其耗时会超过直接字符串处理十倍左右。但是对于常见应用来说,这耗时其实也并不算高。

Tags: , , , / Posted in PHP应用
欢迎订阅: Google Reader | 鲜果 | 抓虾 | 九点 | QQ邮箱 | 有道 | 更多

评论暂缺

  • (Required)
  • (Required, will not be published)

友情链接

Design By CKSKY TEAM VERSION 3.0 他说博客不用备案... © Copyright 2010 All Rights Reserved