Это беспокоило меня в течение некоторого времени, и я хочу знать, что типичный этикет при написании 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.