2015-08-23 2 views
1

У меня есть два пути для показа результата в/с помощью HTML-теги:PHP функция показать результат в 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; 
} 

в результате (again foreach loop):

<?php 
$comments_list = _is_comments_('125','article'); 
foreach($comments_list as $row){ ?> 
<p><?php echo $row['message'].'-'.$row['timestamp'];?></p> 
<?php 
} 
?> 

, какой путь лучше и быстрее?

+1

Так что отлаживайте. А также подумайте - когда кто-то попросит вас добавить еще одну страницу со статьями, но с совершенно другим стилем, что вы будете делать? –

+0

@u_mulder: мне нужно показать комментарии для всех сообщений и страниц. в случае '$ type' для этого. – NewCod3r

+0

Хорошо, одна страница будет иметь комментарии, где временная метка будет завернута в ''. а другой - без 'span'. Что вы будете делать? –

ответ

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>"; 
}); 

Вы можете создать как можно больше анонимных декораторов функций и сделать оригинальную функцию очень мощной и чрезвычайно гибкой.

Хотя обе ссылки выше относятся к объектам, одни и те же принципы могут применяться к функциям и применяться к ним. Я использовал оба шаблона в прошлом с большим успехом.

+0

Если честно, это действительно не шаблон декоратора. Я получаю, откуда вы пришли, и это довольно приятное решение. Но узор декоратора работает с классами и объектами. – Bono

+0

Шаблон декоратора также распространяется на функции и часто используется в функциональном программировании. https://abstractionextraction.wordpress.com/2012/11/22/functional-decorator/ – dlporter98

Смежные вопросы