Лучший способ эхо 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. Так ли это большинство людей?
Ответы
Ответ 1
IMO. Лучший способ, как правило, хранить HTML отдельно в файле шаблона. Это файл, который обычно содержит HTML с некоторыми полями, которые необходимо заполнить. Затем вы можете использовать некоторую структуру шаблонов для безопасного заполнения полей в документе html по мере необходимости.
Smarty - одна из популярных рамок, вот пример того, как это работает (взято из курса Crash 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, существуют десятки разумных решений для шаблонов, соответствующих вашим вкусам. Некоторые из них просты, многие из них обладают довольно сложными функциями.
Ответ 2
Вы также можете разместить свой HTML вне кода кода PHP:
<?php
// PHP code
?>
<head>
<title>title</title>
<style></style>
</head>
<?php
// further PHP code
?>
Ответ 3
Не забывайте, что у вас также есть доступ к 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, который обеспечивает разделение разметки из бизнес-логики.
Ответ 4
пользовательский синтаксис heredoc
echo <<<NO_MORE
<head>
<title>title</title>
<style></style>
</head>
NO_MORE;
или просто выйти из php-вывода html напрямую ?> ... <?php
Ответ 5
Я думаю, что это не лучшее решение. Echoing html не очень читабельна. Я всегда помещаю html вне тегов php. Таким образом, вы получаете отступы, и это также более читаемо.
Что-то вроде этого:
?>
<head>
<title>title</title>
<style></style>
</head>
<?php
И если вы хотите принять его дальше, вы можете использовать систему шаблонов, чтобы действительно отделить логику от презентации.
Ответ 6
Поскольку уже имеется достаточно альтернатив, я бы просто прокомментировал ваш второй подход. Если вы хотите сделать это с помощью эха, лучше использовать:
echo "<head>", PHP_EOL,
"<title>title</title>", PHP_EOL
"<style></style", PHP_EOL
"</head>", PHP_EOL;
Использование PHP_EOL
вместо пользовательской константы не помещает глобальную область с избыточной константой, а также делает независимым от новой строки ОС, так как будет использовать то, что определено для OS PHP, работает.
Использование запятых вместо конкатенации экономит вам некоторую память из-за того, что PHP не должен конкатенироваться вообще, а просто сбрасывает все, что вы бросаете в эхо.
Ответ 7
Первая форма более эффективна, так как она не выполняет конкатенацию строк (.
).
Ответ 8
Если вы используете кавычки для отображения HTML, используйте одиночные кавычки ', потому что PHP ищет переменные в двойных кавычках ", что меньше предпочтений для показа статические строки.
Для меня лучший метод остается тем, который находится за пределами блока PHP, как некоторые другие.
Кроме того, не забудьте ярлык.
Ответ 9
Это отлично сработало для меня!
<?php
echo '
<!DOCTYPE HTML>
<html lang="en-US">
<head>
<meta charset="utf-8" />
<link rel="stylesheet" type="text/css" href="styles.css" />
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript" src="js/java.js"></script>
</head>
<body>
<div id="wrap">
<div id="main_home"></div>
<div id="nav_circle"></div>
<input type="text" id="search_text" value="Your search starts here">
</div>
</body>
</html>
';
?>
Вы можете повторить большое количество HTML-кода, подобного этому в PHP.
Вы должны быть уверены, что это не "внутри HTML". Замените его "и оно будет продолжаться!