タグ内の終了セミコロンを省略する-良いアイデアですか?


8

タグ内の終了セミコロンを省略できます。

例:

<table>
  <th><td>Name</td><td>Email</td>
  <? foreach ($receivers as $receiver): ?>
  <tr>
    <td><?= $receiver->name ?></td>
    <td><?= $recevier->email ?></td>
  </tr>
  <? endforeach ?>
</table>

<? endforeach ?>後にセミコロンがないことに注意してくださいendforeachPHPのドキュメントは 言います:

PHPコードのブロックの終了タグは、自動的にセミコロンを意味します。PHPブロックの最終行をセミコロンで終了する必要はありません。

なぜ私はこのテーマを取り上げるのですか?

現在、私と私の友人は、MVC(model-view-controller)を使用した独自のPHPプロジェクトで働いています。そのため、私はSmarty、MustacheなどのPHPテンプレートエンジンをいくつか評価し、独自の自家製テンプレートエンジンを設計しました。しかし、PHP自体がテンプレートエンジンであることを読んだとき、何かが「クリック」しました。テンプレートエンジンとしてPHPの限定されたサブセットを使用することにチームで同意しないのはなぜですか?そして、ルールを守るために多くのコードレビューがありますか?

このサブセットは次のようになります。

  • 短いタグを使用し<?<?=かつ?>
  • 副作用のない単純な式のみを使用し、特に変数を割り当てない
  • のみを使用しifforeachし、includeステートメントの
  • 制御構造に代替構文のみを使用する
  • タグ内のステートメントはそれぞれ1つだけにしてください

これは、終端のセミコロン、つまりfor <? endforeach ?><? endif ?>を省略しているコンテキスト<? include("list-contents.php") ?>です。

ただし、終端のセミコロンを省略することは悪い習慣であることをよく読みます。どうして?それは悪い習慣ですか?

PHPが終端のセミコロンを省略できることで嬉しいです。これにより、テンプレートファイルの視覚的な混乱が最小限に抑えられます。あちこちに小さなPHPフラグメントのみが含まれたHTMLファイルのように見えるはずです。上記の例は私が努力しているものです。

これについてあなたはどう思いますか?あなたがそれに反対しているなら:なぜ?あなたがそれを支持するならば:なぜそれは良い考えでしょうか?セミコロンを省略することに対していくつかのテキストを彼が私に紹介している場合、パートナーに何を伝えればよいですか?

事実、参考資料、またはあなた自身の経験であなたの意見をバックアップしてください。

回答:


1

PHP、または少なくともそのサブセットをテンプレート言語として使用することは良い考えだと思います。学習する特別なライブラリ構文はなく、テンプレートをPHPに変換するためだけにテンプレートを解析するライブラリのオーバーヘッドがないため、新しい開発者がシステムに統合するのが簡単になります。

また、変数echoステートメントの終了セミコロンも削除する必要があるコンテキストを見逃しました<?= $receiver->name ?>。テンプレートでセミコロンを使用しない場合は、セミコロンを使用しないでください。明らかにあなたのコード例はそれらを使用していませんが、終端のセミコロンを使用しないという不足しているコンテキストを指摘したかっただけです。

本当に重要なことは、チームの賛同を得て、テンプレート全体の一貫性を確保することです。個人的には、セミコロンがないのは不愉快だと思います...すべてのPHPステートメントにセミコロンを直感的に追加したいと思います。同じレベルのOCDを持つ人がチームにいますか?彼らはこれにどのように反応しますか?チームに賛同がなく、1人か2人が激しく反対している場合は、彼らに決断を守らせてください。

別の潜在的な落とし穴は、新しいチームメンバーを組み込むことです。彼らはあなたがこれを行うことさえできることを十分に理解していないかもしれません、あなたのテンプレートに戻ってそして適切なところにすべての終了セミコロンを挿入してください。これは明らかに、開発者がPHPについて必要な知識をあまり持っていない場合ですが、あなたの決定を検討したいものです。テンプレートでは、終了セミコロンではなく他のコードを使用することを、新しいジュニア開発者に教育します。

tl; dr

チームから賛同を得て、テンプレートに一貫性があることを確認し、テンプレートのPHPコードが「通常の」PHPコードと異なる点(代替構文、終了セミコロンなし、許可されたPHP構造など)について新しい開発者を教育するための合理的な計画を立てます。 )。


2

この場合はすべて省略します。具体的には、このコンテキストでは、ブロックまたはブロックごとに1行のステートメントしか使用しないためです。これにより、視覚的な混乱が減り、私のこれまでの何年にもわたって、単一の問題が発生することはありませんでした。


0

短いタグのみを使用する

いいえ、いけません!短いオープンタグに依存するのはひどい考えです。コードの移植性が低下するだけです。多くのシステムでは、短いオープンタグはデフォルトで有効になっていません。また、コードを無効にしている人とコードを共有したい場合はどうでしょうか。その上、短いオープンタグのIMHOからは何も得られません。

制御構造に代替構文のみを使用する

私はあなたがそれから何を得るのか見落としています。一貫したコードベースがないことに加えて。

タグ内のステートメントはそれぞれ1つだけにしてください

それも厄介なことになるかもしれません。どこにでも開いたり閉じたりするタグが散らかっている「テンプレート」がある場合。

PHPの限定されたサブセットをテンプレートエンジンとして使用することにチームで同意するのはなぜですか?

それは誰がそのチームにいるかによって異なります。たとえば、PHPを知っている人だけがそれを使用しますか?あるいは、PHPを知らないテンプレートを変更する必要のあるチームのメンバーもいますか?それが最初の場合、私は要件(別名ルール)でリラックスします。人々が問題に遭遇すると、PHPが提供するすべての力で簡単に解決でき、それを制限して問題を解決しようとするので、ルールまたは非常に厄介なコードを取得します。ただし、チームの中にPHPを知らない人がいる場合は、PHPと同じようにそれでうまくいくかもしれません。

今あなたの質問に答えます:

ただし、終端のセミコロンを省略することは悪い習慣であることをよく読みます。どうして?それは悪い習慣ですか?

コーディングするとき(どの言語でも、どのプロジェクトでも)、コード内の1分あたりのwtfの数を常に減らす必要あります。だから誰かがそれを最初に考えるかもしれないのでそれは悪い習慣です:ちょっと何かがそこに奇妙です!ステートメントを閉じるセミコロンがあるのは、PHPの人々が使用されているというだけのことです。したがって、これはチームの人々に依存している可能性があります(ただし、あなたは個人的な経験を求めました)。これに加えて、フロントエンド(テンプレート)とバックエンドの両方で作業しているときに構文を切り替えるのも非常面倒です。そして、チーム内のエラーと迷惑の両方になりやすいです。

そして最後に、PHPによって何かを実行できるという事実についてです。PHPを使用すると、あらゆる種類のことを実行できます。この事実は、それを使用する必要があるという意味ではありません。Stack Overflowにメタポストがありましたが、Stack Overflowは、PHPにも使用できる独自のルール(またはそのようなもの)の完璧な例ではありません。PHPにはあらゆる種類のFUBAR機能があります(そう言ったのはそうです)。PHPが入力サニテーションなしでクエリを実行できることを推測してください。PHPでは、すべてのコードを1行で記述することもできます。PHPでは、のような変数名を作成することもできます$S0mEvAriBLe。これらすべてのことは、それが最善のことであるとは限りません。

私の2セント


あなたのポイントについてコメントさせてください:1) HTMLテンプレートは«通常のPHP»とは異なる領域であるため、代替構文。これをさまざまな構成要素で強調したい。2)ビューはほとんどがHTMLであり、PHPコードが少ししかないため、タグ内のステートメントは1つだけです。3)懸念の分離により、PHPの能力を制限する。ビューでは、アプリケーションについて何も決定、計算、または照会されません。それはモデルと一緒にコントローラーのタスクです。ビューでPHPの全機能を使用すると、分離が台無しになります。お返事ありがとうございます。参考になります。
nalply
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.