Перевести HTML в PHP или использовать Echo? Что лучше?


С точки зрения производительности, что было бы лучше. Использование PHP для эха всего вывода HTML, чтобы я мог приправлять его различными фрагментами рабочего кода и переменными или периодически экранировать HTML в php во всех документах.

Я знаю, что могут быть некоторые проблемы с удобочитаемостью, но я не должен беспокоиться об этом.

Спасибо всем!

Пример 1

echo '<html>',
     '<body>',
     'The content of the ',$container,' element is displayed in your ', $other_container,
     '</body>',
     '</html>';

ИЛИ

<html>
<body>
The content of the <?php echo $container; ?> element is displayed in your <?php echo $other_container; ?>
</body>
</html>
Author: Paolo Bergantino, 2009-02-03

13 answers

Это все о том, что вы находите наиболее читаемым. Конечно, это будет варьироваться в зависимости от конкретной ситуации. Если бы вы делали целую страницу, и там были большие разделы, в которых не было PHP, тогда я бы вышел из PHP и просто написал простой HTML, тогда как если бы был раздел, в котором было много переменных PHP, я бы сделал все это на PHP.

Например:

<table>
    <tr>
        <td colspan="<?php echo $numCols; ?>">
            <?php echo $a; ?>, <?php echo $b; ?>, and <?php echo $c?>
        </td>
    </tr>
</table>

Против:

<?php
echo "<table>"
    . "<tr>"
    .    "<td colspan=\"" . $numCols . "\">"
    .        $a . ", " . $b . " and " . $c
    .    "</td>"
    . "</tr>"
    . "</table>"
; ?>

Или

<?php
echo "<table>
         <tr>
            <td colspan='{$numCols}'>
               {$a}, {$b}, and {$c}
            </td>
         </tr>
      </table>";
?>

Также не забывайте о printf

<?php
printf("<table>"
    . "<tr>"
    .    "<td colspan=\"%d\">%s, %s and %s</td>"
    . "</tr>"
    . "</table>"
    , $numCols
    , $a
    , $b
    , $c
);
?>
 33
Author: nickf, 2014-09-15 19:49:56

В зависимости от того, что легче всего читать.

Разница в производительности довольно незначительна по сравнению практически с любой другой проблемой, с которой вы столкнетесь. Определенно, читабельность - это первая проблема здесь.

 31
Author: Stephane Grenier, 2009-02-07 01:50:21

Давайте процитируем руководство:

Приведенный здесь пример , конечно, надуман, но для вывода больших блоки текста, выход из режима синтаксического анализа PHP, как правило, более эффективен, чем отправка всего текста через echo() или print().


Но, пожалуйста, послушайте других и избегайте такого рода микрооптимизации и выберите тот, который более разборчив.

Могу ли я предложить третье решение? Вы слышали о шаблонизаторы? Они помогают вам создать четкое разделение между кодом и представлением, что обычно приводит к более чистому коду, который легче поддерживать. Популярным таким шаблоном является, например, smarty, но существуют сотни с различными преимуществами.

 22
Author: Georg Schölly, 2016-01-30 16:59:11

Это не имеет никакого отношения к общей скорости вашего приложения, с которым вы работаете.

Тем не менее, я знаю, что вы сказали, что вам все равно, но, пожалуйста, используйте 2-й, так как его примерно в миллион раз легче читать. И читаемость огромна.

 8
Author: Paolo Bergantino, 2009-02-03 00:50:54

Я не знаю о производительности этого, но в PHP вы также можете использовать то, что, по моему мнению, называется "Heredoc", что, я думаю, помогает с удобочитаемостью в такого рода выводах.

Пример Никфа:

<table>
    <tr>
        <td colspan="<?php echo $numCols; ?>">
            <?php echo $a; ?>, <?php echo $b; ?>, and <?php echo $c?>
        </td>
    </tr>
</table>

Становится:

<?php
echo <<<EOT
<table>
    <tr>
        <td colspan="$numCols">
            $a , $b, and  $c
        </td>
    </tr>
</table>

EOT;

?>

Я действительно считаю, что в конечном счете читаемость - это субъективная вещь, поэтому ваш пробег может варьироваться!

Рут

 8
Author: notruthless, 2009-02-03 02:17:21

Это относится к области микрооптимизации. Большая часть вашего времени уходит на инициализацию PHP-движка, запускающего работу.

Поэтому, если у вас нет порядка десятков тысяч строк (или даже больше), вам не следует беспокоиться об этом.

Чтобы добавить, я провел небольшой тест из миллиона строк, где я использовал php для их печати и где я использовал php для вызова программы на c, которая делала то же самое, и разница была незначительной.

Еще немного информация.

То, что происходит во 2-м примере, заключается в том, что вы "включаете/выключаете" PHP, это не совсем то, что происходит, но для этого примера это подходит.

О чем вам следует больше беспокоиться, так это о том, будет ли в этом коде много логики? Собираюсь ли я разделить эту строку на еще большее количество строк или даже разместить ее в разных местах? Является ли это представлением приложения MVC?

Для 1 и 2 это может быть жеребьевка между любым методом. Но для 3 я бы выбрал метод 2 по этим причинам.

Представление в веб-приложении MVC в основном состоит из html/css. Поэтому я хочу, чтобы это было правильно отформатировано, и я хочу видеть в своем редакторе раскраску html. Так что это плюс.

 5
Author: Ólafur Waage, 2009-02-03 01:01:47

С точки зрения производительности... это не важно. Читабельность кода - это король, крошечная доля процента разницы в производительности ничего не изменит.

Исходная версия HTML, как правило, легче всего читается (и, вероятно, также обладает лучшей производительностью, чего бы это ни стоило, но чего это стоит: ничего). Это неудивительно: PHP - это язык шаблонов HTML, вся точка - это чередование HTML на уровне синтаксиса языка.

Посмотрите на код никфа, чтобы узнать, как сделать его читабельным. Отступы важны! Также установите уровень отступов внутри каждой структуры управления PHP, чтобы вы могли отслеживать их. например.:

<?php if ($error) { ?>
    <p> Oh no, error! </p>
<?php } ?>

Наконец, при выводе контента, такого как $container в вашем примере, вы всегда должны использовать htmlspecialchars(), иначе у вас будет приложение, полное дыр в безопасности HTML-инъекций, как у любого другого новичка в PHP (и даже у многих профессиональных разработчиков, к сожалению). Это имеет значение, какой бы метод вы ни использовали для вывода содержание.

Поскольку htmlspecialchars - довольно раздражающе длинное имя функции, вы можете попробовать определить свою собственную функцию быстрого доступа:

<?php
    function h($s) {
        echo(htmlspecialchars($s, ENT_QUOTES));
    }
?>

<ul>
    <?php foreach ($things as $thing) { ?>
        <li> <?php h($thing['name']) ?> </li>
    <?php } ?>
</ul>
 3
Author: bobince, 2009-02-03 02:02:21

Кодируйте так, как если бы следующий программист, взявший на себя управление проектом, был серийным убийцей. Другими словами, используйте второй вариант, о котором вы упомянули.

 3
Author: Mario, 2009-02-06 18:26:01

Это следует рассматривать скорее как проблему читаемости и обслуживания, чем проблему производительности.

Таким образом, вариант 2 имеет несколько конкретных преимуществ:

  1. Раскраска кода. С вариантом 1 все окрашено в виде оператора echo, что затрудняет чтение HTML.
  2. Intellisense - Во многих IDE HTML в операторе PHP echo не будет задействован intellisense, поэтому вы будете вводить весь этот HTML вручную.
 3
Author: Cory House, 2009-02-06 18:35:43

Для небольших битов я просто сохраняю все это в строках PHP, например, при циклическом просмотре массива для создания списка. Но для больших куч разметки я не включаю это в PHP и просто переключаюсь на PHP, когда это необходимо.

Во многом это связано с тем, что я предпочитаю оптимизировать для удобства обслуживания. Не только потому, что быстрее увидеть, что происходит, когда в html применяется соответствующая подсветка синтаксиса, но и потому, что он также допускает ошибки, возникающие в результате неправильного чтения кода, с меньшей вероятностью происходить.

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

 2
Author: Trevor Bramble, 2009-02-03 00:55:53

Я предпочитаю использовать функцию php heredoc, таким образом, мне не нужно экранировать какие-либо символы, например:

<?php

$title = "heredoc is cool!!!";
$mySite = "http://www.php.net";

echo <<<LOL
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>

  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <meta name="viewport" content="width=device-width, initial-scale=1.0"> 

  <title> $title </title>

 <link rel="shortcut icon" href="$mySite/favicon.ico">
 <link rel="search" type="application/opensearchdescription+xml" href="$mySite/phpnetimprovedsearch.src" title="Add PHP.net search">
 <link rel="alternate" type="application/atom+xml" href="$mySite/releases/feed.php" title="PHP Release feed">
 <link rel="alternate" type="application/atom+xml" href="$mySite/feed.atom" title="PHP: Hypertext Preprocessor">

 <link rel="canonical" href="$mySite/manual/en/language.types.string.php">
 <link rel="shorturl" href="$mySite/types.string">

 <link rel="contents" href="$mySite/manual/en/index.php">
 <link rel="index" href="$mySite/manual/en/language.types.php">
 <link rel="prev" href="$mySite/manual/en/language.types.float.php">
 <link rel="next" href="$mySite/manual/en/language.types.array.php">
LOL;
?>

Примечание:

Текст Heredoc ведет себя так же, как строка в двойных кавычках, без двойных кавычек. Это означает, что кавычки в heredoc не нужно экранировать, но экранирующие коды, перечисленные выше, все еще можно использовать. Переменные расширяются, но такая же осторожность должна быть проявлена, когда выражение комплексных переменных внутри heredoc, как и в строках.

 2
Author: Pedro Lobito, 2016-01-30 01:10:11

Последнее гораздо более читабельно. Его также легче редактировать (например, вам не нужно экранировать кавычки в HTML). И он сохраняет пробелы без каких-либо проблем, что может быть предпочтительнее, особенно для целей отладки.

Я почти хотел бы, чтобы PHP позволил print() и echo() автоматически конвертировать символы HTML, чтобы люди перестали использовать их для создания HTML.

 1
Author: eyelidlessness, 2009-02-03 01:27:56

Вам следует серьезно подумать о том, чтобы никогда не размещать PHP внутри HTML. Вы смешиваете логику с представлением, что делает проект беспорядочным.

Как уже говорили другие, если вы выводите в html, используйте <?php echo $whatever; ?>

Если вам нужно вывести массу информации, загляните в буферизацию вывода.

 1
Author: Syntax, 2009-02-05 14:30:50