我有两种方法来显示/使用html标签的结果:
第一种方法:(将HTML添加到函数中)
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;
}
结果:echo _is_comments_('125','article');
第二种方式:(将HTML与函数分开)
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;
}
in result(again foreach loop
):
<?php
$comments_list = _is_comments_('125','article');
foreach($comments_list as $row){ ?>
<p><?php echo $row['message'].'-'.$row['timestamp'];?></p>
<?php
}
?>
哪条路更好更快?
将关注点分开总是一个很好的设计实践。因此,第二种方法是最好的选择,因为它将函数的职责限制在仅访问数据。
考虑到这一点,您可以考虑将函数作为第三个参数传递给将携带格式的函数。这被称为装饰器模式。 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>";
});
你可以创建任意多的匿名函数装饰器,这使得原始函数非常强大和非常灵活。
虽然上面的两个链接都指向对象,但是同样的原则也可以应用于函数。在过去,我将这两种模式结合使用,并取得了巨大的成功。