Есть ли лучший способ писать строки 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> 

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

благодаря

PHP знает несколько видов синтаксиса для объявления строки :

  • одинарная кавычка

     ' … ' 
  • двойное цитирование

     " … " 
  • синтаксис heredoc

     <<<DELIMITER … DELIMITER 
  • Синтаксис nowdoc (начиная с PHP 5.3.0)

     <<<'DELIMITER' … DELIMITER 

Поэтому вам не нужно использовать двойные кавычки как таковые.

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

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

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

 // 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'); }); - 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'); }); - 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'); }); - 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'); }); - 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! 

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

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