Есть ли лучший способ писать строки HTML в PHP?

Я нахожу, что пишу много функций в 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>

Или что-то подобное. Может ли кто-нибудь обновить мою память?

Спасибо

Ответы

Ответ 2

Если вам нужен метод, который можно использовать для хранения 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

Ответ 3

Он называется синтаксисом 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;

Ответ 4

Лучший способ - не писать код спагетти, использовать шаблон или

// 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

Ответ 6

Вы можете использовать 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;
}

?>

Ответ 7

Как сказал Хаим - heredoc - путь.

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

Итак, например:

$html = "<div id='blah'>$contents</div>";

Ответ 8

Мне нравится предлагать эту 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');
});

Ответ 9

Иногда по какой-то причине случается, что 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!

Этот фильм очень мне помог, потому что раньше у меня была эта проблема.

Источник: здесь