PHPとHTML、使用する適切なインデントスタイルは何ですか?出力されたHTMLが正しいインデントを持つように、またはPHP/HTMLミックスが適切にフォーマットされているようにインデントしますしたがって、読みやすい)?
たとえば、テーブル行を出力するforeach
ループがあるとします。以下のどれが正しいですか?
PHP/HTMLミックスは正しいように見えます:
<table>
<?php foreach ($rows as $row): ?>
<tr>
<?php if ($row->foo()): ?>
<?php echo $row ?>
<?php else: ?>
Something else
<?php endif ?>
</tr>
<?php endforeach ?>
</table>
出力されたHTMLは正しいように見えます:
<table>
<?php foreach ($rows as $row): ?>
<tr>
<?php if ($row->foo()): ?>
<?php echo $row ?>
<?php else: ?>
Something else
<?php endif ?>
</tr>
<?php endforeach ?>
</table>
私はこの状況に出くわすと(かなり頻繁に)、使用する標準的なスタイルがないことに気付きました。 「正しい」答えがないかもしれないことは知っていますが、他の開発者からの意見を聞きたいです。
PHPとHTMLは、互いにおよび出力された形式に関係なく、ソース形式で自分自身に対して正しいように、それぞれインデントする必要があります。
<table>
<?php foreach ($rows as $row): ?>
<tr>
<?php if ($row->foo()): ?>
<?php echo $row ?>
<?php else: ?>
Something else
<?php endif ?>
</tr>
<?php endforeach ?>
</table>
私もこの質問をよく考えましたが、HTML出力がどのように見えるか気にしているのは誰なのでしょうか?とにかくあなたのユーザーはあなたのHTMLを見るべきではありません。 [〜#〜] you [〜#〜]が読むためのものであり、おそらく他の開発者もいます。 sourceのコードをできる限りきれいに保ち、出力がどのように見えるかを忘れます。
出力をデバッグする必要がある場合は、Chrome Developer Tools、Firebug、またはF12 Toolsを使用します。
通常、行の先頭にopening phpタグを配置しますが、タグ内にあるものはすべてインデントして、HTML形式に一致させます。ただし、短いオープンタグを使用するため、単純なechoステートメントではこれを行いません。すべての宣言を見つけるためにファイルをブラウズするとき、それがより簡単になると思います。
<table>
<? foreach ($foo as $bar): ?>
<tr>
<? foreach ($bar as $baz): ?>
<td><?=$baz?></td>
<? endforeach ?>
</tr>
<? endforeach ?>
</table>
読みやすくするために、常に少しの空白も使用できます。カオスのインデントの構築:
<table>
<?php foreach ($rows as $row): ?>
<tr>
<?php if ($row->foo()): ?>
<?php echo $row ?>
<?php else: ?>
Something else
<?php endif ?>
</tr>
<?php endforeach ?>
</table
これの唯一の欠点は、a lotの混合コードがある場合、ドキュメントが2倍長くなり、スクロールが増えることです。このように多くのコードが混在している場合は、テンプレートエンジンを検討することをお勧めします。
実稼働環境でマークアップのインデントを気にする必要はありません。また、Tidyやその他のHTMLピューリファイヤーも使用しないでください。有効なユースケースがあります。 HTML入力を許可する場合(ただし、代わりに Markdown の使用を検討してください)、これらはまれです。
ほとんどの場合、HTML美化フィルターは、コードの根本的な問題を隠すために悪用されます。しないでください。マークアップを手動で修正します。
開発環境でのみコードをインデントする必要がある場合は、上記のいずれかを使用できます。ただし、これらのライブラリはマークアップの修正を試みることに注意してください(これが主な目的です。インデントは副産物です)。正規表現ベースのインデントツール Dindent を作成しました。
Dindentは次のようにマークアップを変換します。
<!DOCTYPE html>
<html>
<head></head>
<body>
<script>
console.log('te> <st');
function () {
test; <!-- <a> -->
}
</script>
<div>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<div><table border="1" style="background-color: red;"><tr><td>A cell test!</td>
<td colspan="2" rowspan="2"><table border="1" style="background-color: green;"><tr> <td>Cell</td><td colspan="2" rowspan="2"></td></tr><tr>
<td><input><input><input></td></tr><tr><td>Cell</td><td>Cell</td><td>Ce
ll</td></tr></table></td></tr><tr><td>Test <span>Ce ll</span></td></tr><tr><td>Cell</td><td>Cell</td><td>Cell</td></tr></table></div></div>
</body>
</html>
これに:
<!DOCTYPE html>
<html>
<head></head>
<body>
<script>
console.log('te> <st');
function () {
test; <!-- <a> -->
}
</script>
<div>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<div>
<table border="1" style="background-color: red;">
<tr>
<td>A cell test!</td>
<td colspan="2" rowspan="2">
<table border="1" style="background-color: green;">
<tr>
<td>Cell</td>
<td colspan="2" rowspan="2"></td>
</tr>
<tr>
<td>
<input>
<input>
<input>
</td>
</tr>
<tr>
<td>Cell</td>
<td>Cell</td>
<td>Ce ll</td>
</tr>
</table>
</td>
</tr>
<tr>
<td>Test <span>Ce ll</span></td>
</tr>
<tr>
<td>Cell</td>
<td>Cell</td>
<td>Cell</td>
</tr>
</table>
</div>
</div>
</body>
</html>
Dindentは、インデントを追加する以外に、コードのサニタイズや干渉を試みません。これは、開発/デバッグを簡単にするためです。生産用ではありません。