PHP в HTML-этикете

Это беспокоило меня в течение некоторого времени, и я хочу знать, что типичный этикет при написании PHP-кода в HTML.

У меня есть следующий код:

<?php $country_list = array("AF"=>"Afghanistan", "AL"=>"Albania", "DZ"=>"Algeria"); echo '<div class="some-class"> <font color="red">Just some text.</font> <select>'; foreach($country_list as $country_code => $country_name) { echo '<option value="' . $country_code . '">' . $country_name; } echo '</select> </div>'; ?> 

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

Есть ли способ улучшить, чтобы он выглядел лучше? Есть ли какой-то PHP-этикет при написании PHP-кода, подобного этому встроенному HTML?

Благодарю.

Обычная практика заключается в том, чтобы отделить ваш код, который выводит HTML («вид») из вашей логики (как правило, в «контроллер»). Как минимум, это можно сделать с помощью PHP-кода, который просто обрабатывает вывод, но обычно делается с помощью механизма шаблонов, такого как Smarty .

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

  • Не учитывайте отступ HTML. Только беспокоиться о вводе кода в PHP. В любом случае, это важно для вас. Если вам нужно использовать отложенный HTML-код, пусть ваши инструменты разработчика вашего браузера беспокоятся об этом.

  • Избегайте повторного закрытия / открытия PHP-тегов. Просто придерживайтесь echo . Опять же, если вам нужно так много смешать PHP и HTML, что вы чувствуете необходимость многократно закрывать / открывать теги PHP, рассмотрите механизм шаблонов.

Наконец, обязательно используйте htmlspecialchars() любых произвольных данных, которые вы htmlspecialchars() в HTML, чтобы гарантировать, что вы генерируете действительный HTML, и избегаете определенных видов уязвимостей XSS-атаки.

Это все довольно субъективно, но вы можете рассматривать только взлом в PHP, когда это абсолютно необходимо:

 <div class="some-class"> <font color="red">Just some text.</font> <select> <?php $country_list = array("AF"=>"Afghanistan", "AL"=>"Albania", "DZ"=>"Algeria"); foreach ($country_list as $country_code => $country_name) { printf('<option value="%s">%s</option>', $country_code, $country_name); } ?> </select> </div> 

Я полагаю, что вам не нужно бежать от ваших ценностей, т. Е. Никаких «непослушных стран».

Кроме того, существуют механизмы шаблонов, которые могут помочь вам в этом, например PHPTAL :

 <div class="some-class"> <font color="red">Just some text.</font> <select> <option tal:repeat="country countries" tal:attributes="value repeat/country/key" tal:content="country" /> </select> </div> 

PHP-код:

 $tal = new PHPTAL('path/to/template'); $tal->set('countries', $countries); echo $tal->execute(); 

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

это то, что я обычно делаю

 <?php $country_list = array("AF"=>"Afghanistan", "AL"=>"Albania", "DZ"=>"Algeria"); $countries = ''; foreach($country_list as $country_code => $country_name) { $countries. = '<option value="' . $country_code . '">' . $country_name; } ?> 

// html часть

 div class="some-class"> <font color="red">Just some text.</font> <select name="country> <?php echo $countries; ?> </select> </div 

Вы могли бы сделать что-то вроде этого … Я делаю это иногда

 <?php $country_list = array("AF"=>"Afghanistan", "AL"=>"Albania", "DZ"=>"Algeria"); ?> <div class="some-class"> <font color="red">Just some text.</font> <select> <?php foreach($country_list as $country_code => $country_name) { ?> <option value="<?=$country_code?>"><?=$country_name?></option> <?php } ?> <select> </div> 

Не уверен в «этикете», но эхо HTML не может быть лучшей идеей. Может быть, что-то вроде этого:

  <div class="some-class"> Just some text <select> <?php foreach($country_list as $country_code => $country_name) { ?> <option value="<?php echo $country_code;?>"> <?php echo $country_name; ?> </option> <?php } ?> </select> </div> 

Поэтому минимизируйте эхо-теги HTML.