php函数显示html最佳实践的结果

时间:2015-08-23 18:10:43

标签: php mysql

我有两种方式在/ html标签中显示结果:

第一种方式:(将html添加到函数中)

WITH cte([% APL Population],[% APL PopulationPercent])
AS 
(
    SELECT 
        [% APL Population]
        ,[% APL PopulationPercent] = ( [% APL Population] / NULLIF(Max([% APL Population]) OVER(), 0) ) * 100 
    FROM   dbo.Indicators
)
SELECT 
    [% APL Population],
    [% APL Populationcolor] = CASE 
           WHEN [% APL PopulationPercent] >= 0  AND [% APL PopulationPercent] < 20 THEN 'red' 
           WHEN [% APL PopulationPercent] >= 20 AND [% APL PopulationPercent] < 40 THEN 'blue' 
           WHEN [% APL PopulationPercent] >= 40 AND [% APL PopulationPercent] < 60 THEN 'green' 
           WHEN [% APL PopulationPercent] >= 60 AND [% APL PopulationPercent] <= 100 THEN 'purple' 
           ELSE 'unknown'
    END
FROM  cte

结果:

function _is_comments_($id,$type){

    $db = mysqli_access::F("SELECT message,timestamp FROM " . COMMENTS . " WHERE pid = ? AND type = ? AND approved = 1 ", $id, $type);

    foreach($db as $row){
      $commentdata = '<p>'.$row['message'].'-'.$row['timestamp'].'</p>';
    }
    return $commentdata;
}   

第二种方式:(将html与函数分开)

echo _is_comments_('125','article');
结果中的

function _is_comments_($id,$type){ $db = mysqli_access::F("SELECT message,timestamp FROM " . COMMENTS . " WHERE pid = ? AND type = ? AND approved = 1 ", $id, $type); foreach($db as $row){ $commentdata[] = $row; } return $commentdata; } ):

again foreach loop

哪种方式更好更快?

1 个答案:

答案 0 :(得分:2)

将问题分开是一个很好的设计实践。所以第二个是最好的选择,因为limits the the responsibility of the function只是访问数据。

考虑到这一点,您可以考虑将函数作为第三个参数传递给将带有格式的函数。这称为decorator pattern

    function _is_comments_($id,$type, $decorator){

        $db = mysqli_access::F("SELECT message,timestamp FROM " . COMMENTS . " WHERE pid = ? AND type = ? AND approved = 1 ", $id, $type);

        foreach($db as $row){
          $commentdata[] = $decorator($row);
        }
        return $commentdata;
    }   

_is_comments_($id,$type, function($item){
    return "<span>$item</span>";
});

您可以根据需要创建任意数量的匿名函数装饰器,它可以使原始函数非常强大且非常灵活。

虽然上面的两个链接都指向对象,但是相同的原则可以并且适用于函数。我过去一直使用这两种模式并取得了巨大的成功。