Ответ 1
PHP знает несколько типов синтаксиса для объявления строки:
-
' … '
-
" … "
-
<<<DELIMITER … DELIMITER
-
синтаксис nowdoc (начиная с PHP 5.3.0)
<<<'DELIMITER' … DELIMITER
Поэтому вам не нужно использовать двойные кавычки как таковые.
Я нахожу, что пишу много функций в PHP, которые возвращают HTML-код. Они могут выглядеть примерно так:
function html_site_head()
{
return
"
<div id=\"site_header\">
<div id=\"site_header_inner\">
<div id=\"site_header_logo\"></div>
<div id=\"site_header_countdown\">BARE XX DAGER IGJEN</div>
</div>
</div>
";
}
Теперь я могу поклясться, что видел лучшие способы писать длинные строки в PHP. Мне нравится способ python:
return """
<div id="site_header">
<div id="site_header_inner">
<div id="site_header_logo"></div>
<div id="site_header_countdown">BARE XX DAGER IGJEN</div>
</div>
</div>
"""
Как вам не нужно избегать кавычек. Альтернативой является использование одинарных кавычек, но это означает отсутствие использования переменных PHP непосредственно в строке. Клянусь, я видел что-то подобное в PHP:
return <<<
<div id="site_header">
<div id="site_header_inner">
<div id="site_header_logo"></div>
<div id="site_header_countdown">BARE XX DAGER IGJEN</div>
</div>
</div>
Или что-то подобное. Может ли кто-нибудь обновить мою память?
Спасибо
PHP знает несколько типов синтаксиса для объявления строки:
' … '
" … "
<<<DELIMITER
…
DELIMITER
синтаксис nowdoc (начиная с PHP 5.3.0)
<<<'DELIMITER'
…
DELIMITER
Поэтому вам не нужно использовать двойные кавычки как таковые.
Если вам нужен метод, который можно использовать для хранения HTML в строке, это способ сделать это.
Я бы не использовал ни один из этих других предложенных методов lol, я бы использовал буфер вывода. Эти другие методы кажутся очень грязными (потому что в масштабе будет много особых персонажей, летающих вокруг)... поэтому, рискуя оскорбить кого-то, я просто скажу, почему мне нравится мой путь.
Если вы используете выходной буфер, как я сделал...
При использовании IDE у вас все еще может быть отличная поддержка intelisense с HTML и PHP отдельно друг от друга и по-прежнему быстро кодировать общие объекты DOM.
При просмотре кода он выглядит намного читательнее.
HTML-код может быть передан в состоянии готовности DOM, а не как строка, которая в конечном итоге должна быть проанализирована и в конечном итоге создана в состоянии готовности DOM.
При использовании HTML как строкового метода он может стать очень грубым, пытаясь использовать различные методы поиска и замены строк, чтобы изменить часть вашего кода после выполнения. Например, поиск тега <img>
в массивной строке других элементов HTML может быть сложным, особенно при попытке найти материал между тегами...
Я бы использовал поток буфера вывода так...
ob_start();
?>
<div id="site_header">
<div id="site_header_inner">
<div id="site_header_logo"><?php echo $PhpVar; ?></div>
<div id="site_header_countdown">BARE XX DAGER IGJEN</div>
</div>
</div>
<?php
$output = ob_get_clean();
ob_flush();
return $output; OR return echo $output
Он называется синтаксисом heredoc:
return <<< END
<div id="site_header">
<div id="site_header_inner">
<div id="site_header_logo"></div>
<div id="site_header_countdown">BARE XX DAGER IGJEN</div>
</div>
</div>
END;
Лучший способ - не писать код спагетти, использовать шаблон или
// php code
?>
<div id="site_header">
<div id="site_header_inner">
<div id="site_header_logo"><?=$echoPhpVar?></div>
<div id="site_header_countdown">BARE XX DAGER IGJEN</div>
</div>
</div>
<?php
//php code
То, что вы ищете, это синтаксис heredoc или синтаксис nowdoc.
Вы можете использовать HEREDOC:
<?php
function blah() {
$bar = <<<EOS
<div id="site_header">
<div id="site_header_inner">
<div id="site_header_logo"></div>
<div id="site_header_countdown">BARE XX DAGER IGJEN</div>
</div>
</div>
EOS;
return $bar;
}
?>
Как сказал Хаим - heredoc
- путь.
Если вы обнаружите, что пишете отдельные строки, помните (или понимаете), что вы можете использовать одинарные кавычки для атрибутов HTML (не верьте никому, кто пытается сказать вам, что они недействительны).
Итак, например:
$html = "<div id='blah'>$contents</div>";
Мне нравится предлагать эту PHP-библиотеку, которая может обрабатывать генерирование всего HTML-тега с php и использует закрытие вложений, которое также помогает читать.
https://github.com/raftalks/Form
например - таблица внутри тега div
Html::make('div', function($html))
{
$html->table(function($table)
{
$table->thead(function($table)
{
$table->tr(function($tr)
{
$tr->th('item');
$tr->th('category');
});
});
$table->tr(function($tr)
{
$tr->td()->ng_bind('item.name','ng-bind');
$tr->td()->ng_bind('item.category','ng-bind');
$tr->setNgRepeat('item in list','ng-repeat'); //using second parameter to force the attribute name.
});
$table->setClass('table');
});
$html->setClass('tableContainer');
});
Иногда по какой-то причине случается, что PHP или Javascript или некоторые непослушные вставляют много обратной косой черты. Обычная функция этого не замечает. Поэтому необходимо, чтобы бит "раздувался":
<?php
function removeslashes($string)
{
$string=implode("",explode("\\",$string));
return stripslashes(trim($string));
}
/* Example */
$text="My dog don\\\\\\\\\\\\\\\\'t like the postman!";
echo removeslashes($text);
?>
RESULT: My dog don't like the postman!
Этот фильм очень мне помог, потому что раньше у меня была эта проблема.
Источник: здесь