Лучший способ повторить HTML в [закрытом] PHP

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

Лучше сделать это:

<?php
echo "<head>
<title>title</title>
<style></style>
</head>";
?>

или это:

<?php
define("rn","\r\n");
echo "<head>".rn
."<title>title</title>".rn
."<style></style".rn
."</head>".rn;
?>

Я склонен использовать второе, поскольку это не портит расположение с отступом в php источнике. Действительно ли это - способ, которым большинство людей делает это?

15
задан Alex 27 February 2010 в 15:39
поделиться

8 ответов

IMO, лучше всего хранить HTML отдельно в файле шаблона. Это файл, который обычно содержит HTML с некоторыми полями, которые необходимо заполнить. Затем вы можете использовать некоторую структуру шаблонов для безопасного заполнения полей в HTML-документе по мере необходимости.

Smarty - один из популярных фреймворков, вот пример того, как он работает (взят из ускоренного курса Smarty).

Файл шаблона

<html>
<head>
<title>User Info</title>
</head>
<body>

User Information:<p>

Name: {$name}<br>
Address: {$address}<br>

</body>
</html>

PHP-код, который вставляет имя и адрес в файл шаблона:

include('Smarty.class.php');

// create object
$smarty = new Smarty;

// assign some content. This would typically come from
// a database or other source, but we'll use static
// values for the purpose of this example.
$smarty->assign('name', 'george smith');
$smarty->assign('address', '45th & Harris');

// display it
$smarty->display('index.tpl');

Помимо Smarty существует множество разумных вариантов для шаблонных фреймворков, которые соответствуют вашим вкусам. Некоторые из них просты, многие обладают довольно сложными функциями.

20
ответ дан 1 December 2019 в 00:10
поделиться

Вы также можете разместить свой HTML за пределами блока кода PHP:

<?php
    // PHP code
?>
<head>
<title>title</title>
<style></style>
</head>
<?php
    // further PHP code
?>
14
ответ дан 1 December 2019 в 00:10
поделиться

Я думаю, что это не лучшее решение. Повторение html не очень читается. Я всегда помещаю html вне тегов php. Таким образом, вы получите отступ, и он будет более читабельным.

Примерно так:

?>
<head>
    <title>title</title>
    <style></style>
</head>
<?php

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

3
ответ дан 1 December 2019 в 00:10
поделиться

Не забывайте, что у вас также есть доступ к HEREDOC ( http://www.php.net/manual/en/language.types.string. php # language.types.string.syntax.heredoc )

echo <<< HERE
<head>
   <title>title</title>
   <style></style>
</head>
HERE;

Кроме того, я хотел бы изучить что-то вроде шаблонов Smarty - и, что более важно, шаблон проектирования MVC, который обеспечивает отделение разметки от бизнес-логики.

10
ответ дан 1 December 2019 в 00:10
поделиться

синтаксис heredoc пользователя

echo <<<NO_MORE

<head>
<title>title</title>
<style></style>
</head>

NO_MORE;

или просто выйти из HTML-вывода php напрямую ?> .. .

4
ответ дан 1 December 2019 в 00:10
поделиться

Поскольку уже приведено достаточно альтернатив, я просто прокомментирую ваш второй подход. Если вы хотите сделать это с помощью echo, то лучше использовать:

echo "<head>", PHP_EOL,
     "<title>title</title>", PHP_EOL
     "<style></style", PHP_EOL
     "</head>", PHP_EOL;

Использование PHP_EOL вместо пользовательской константы позволяет не засорять глобальную область видимости лишней константой, а также делает newline независимым от ОС, так как будет использоваться то, что определено для ОС, на которой работает PHP.

Использование запятых вместо конкатенации экономит память, так как PHP не нужно конкатенировать вообще, а просто сбрасывать все, что вы бросите в echo.

3
ответ дан 1 December 2019 в 00:10
поделиться

Если вы используете кавычки для отображения HTML, используйте одинарные кавычки ', потому что PHP ищет переменные в двойных кавычках ", что менее предпочтительно для отображения статических строк. .

Для меня лучшим методом остается метод вне блока PHP, некоторые из них, как и другие, ответили.

Кроме того, не забудьте ярлык.

0
ответ дан 1 December 2019 в 00:10
поделиться

Первая форма более эффективна, поскольку не выполняет конкатенацию строк (. ).

0
ответ дан 1 December 2019 в 00:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: