我有两种方式在/ 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
哪种方式更好更快?
答案 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>";
});
您可以根据需要创建任意数量的匿名函数装饰器,它可以使原始函数非常强大且非常灵活。
虽然上面的两个链接都指向对象,但是相同的原则可以并且适用于函数。我过去一直使用这两种模式并取得了巨大的成功。