Повторение HTML-кода или исключение его из PHP

#php

#php

Вопрос:

Должен ли я предпочесть один из этих фрагментов другому и почему?

1.

 function render()
{
    echo "<div>$content</div>";
}
  

2.

 function render()
{
    ?>
    <div><?= $content ?></div>
    <?php
}
  

Комментарии:

1. Рассмотрите возможность включения файлов или просто XPHP. итак, в принципе, теперь у нас есть 4 варианта 🙂

2. Каковы были бы преимущества предлагаемых вами вариантов?

3.В этой настройке я бы предпочел первое (просто для более чистого кода). Еще лучше полностью исключить HTML из вашего PHP-кода, например, используя templateParser, а вместо echo "<div>$content</div>"; этого вы бы поместили что-нибудь как $tpl->NewBlock("CONTENT"); $tpl->assign(array('content' => $content)); (это пример для TemplateParser). Или, поскольку это класс (по крайней мере, я так думаю): верните значение и добавьте его в HTML в другой файл.

4. Выход из PHP-блока в определении класса или функции для меня просто абсолютное табу.

5. Я предпочитаю включать файлы (поскольку я все еще не очень знаком с XPHP). Включаемые файлы будут служить вашими файлами «просмотра», при этом вы получите ощущение MVC (разделение задач). Ваш CSS, клиентские скрипты и т.д. Находятся в файлах просмотра. Все данные генерируются в функциях PHP, а затем передаются в файл. Однако использование include или require внутри функции не приведет к предоставлению глобальных переменных в файл, вам нужно $GLOBALS или global $var;

Ответ №1:

И то, и другое не очень хорошая идея. Причиной является вывод функции. Попробуйте сделать так:

 function render( $content_, $style_ )
{
    $res = "<div{$style_}>$content_</div>";
    return $res;
}
  

и затем:

 echo render( "Content inside div", " style='color:red;'" )
  

Причина:

  1. Функция вычисляет и возвращает, ее основная цель — это.
  2. Приложение генерируется, и оно может использовать функции для подготовки.
  3. Возможно, в будущем вам потребуется создать какой-нибудь заголовок, и хорошей идеей будет запустить весь вывод в конце скрипта. Использование шаблонов, таких как Smarty, so — сэкономит вам много времени 🙂

Ответ №2:

Как правило, рекомендуется сохранять содержимое каждого файла, составляющего ваше приложение, как можно более лаконичным. Поскольку PHP является языком шаблонов, и у вас могут быть PHP-файлы с совершенно разными целями (учтите, что файл, содержащий чистый HTML, является допустимым PHP-файлом), мое личное предпочтение:

Если вам нужно создать небольшой фрагмент HTML в коде, не открывайте и не закрывайте теги PHP.

Например, предпочтите это:

 function render()
{
    echo "<div>$content</div>";
}
  

из-за этого:

 function render()
{
    ?><div><?= $content ?></div><?php
}
  

Также обратите внимание, что во фрагменте выше я не включил никаких пробелов сразу после тега PHP close или перед тегом PHP open; обычно пробелы не имеют значения в HTML, но это может иметь значение в двух случаях:

  • Вы хотите иметь HTML с красивым отступом (иногда полезно при разработке)
  • Наличие одного или нескольких пробелов вместо их полного отсутствия создает дополнительный текстовый узел в дереве DOM, что может иметь значение

Если вы хотите включить такого рода пробелы в HTML, ваш исходный код в любом случае будет немного уродливым на вид, но определенно уродливее, если вы используете подход с тегами close / open.

Изолируйте большие фрагменты HTML в представлениях и при необходимости добавляйте туда небольшие фрагменты логики.

Например, предпочтите это:

 <body>
  <div id="blah">
    <ul id="nav">
      <?php foreach ($navItems as $url => $title) : ?>
      <!--
      NOTE:
      You can opt to make the line below a single echo statement
      in PHP rather than HTML with values from PHP substituted
      in various places inside, and in this example it might even
      be better. However, if the output for each item is more complex
      than a li/a pair, it will be far more readable in this form.
      -->
      <li><a href="<?php echo $url ?>"><?php echo $title ?></a></li>
      <?php endforeach; ?>
  

из-за этого:

 $output = '<body><div id="blah"><ul id="nav">';
foreach ($navItems as $url => $title) {
    $output .= '<li><a href="'.$url.'">'.$title.'</a></li>
}

echo $output;