web-dev-qa-db-ja.com

すべての行に<?phpと?>があるのはなぜですか。

私はこのコンベンションをいたるところで見てきました、そして時々、それは私をナッツに駆り立てることに近づいています:

<?php //The loop ?>
<?php while ( have_posts() ) : the_post(); ?>
    <?php the_content(); ?>
<?php endwhile; // end of the loop. ?>

介在するHTMLコードがなくても、<?phpと終了?>が1行ごとに表示される場所。

私の質問は:なぜですか? これらの追加タグをすべて含めるのはなぜですか。

私にとっては、この規約はコードにかなりの量の混乱を追加し、最初の場所で従うのが面倒であり、そして誤って開始タグまたは終了タグを省くためのさらに多くの場所を追加するようです。

注意

これはWordPressの例であるTwenty-12テーマから抜粋したコードです。

24
Indigenuity

これはどのWordPressスタイルガイドでも推奨されていません、そして私はそれが悪いコーディングスタイルだと思います。初心者がこのスタイルを使っているのは、おそらくHTMLのような感じがするからでしょう…

残念ながら、デフォルトのテーマはあまりにも頻繁にこのスタイルを使用しているので、初心者の中にはそれがコードスタイルの一部であると思うかもしれません。

このスタイルの1つの欠点はコメント処理です。次の例をよく見てください。また、著者の期待どおりにはいかないことがわかります。

<?php echo 'Important: '; // announcement ?>
<?php echo ' enter the Word '; /* start ?>
<?php echo '<b>password</b>'; /* the end */ ?>

頑張ってデバッグしてください。 :)

規則:PHPとHTMLコンテキストを切り替えるのは、両方の言語で出力を作成する必要がある場合だけにしてください。それ以外の場合は通常の改行を使用してください。

更新、さらなる考察: すべての有効なHTMLファイルは、完全で有効なPHPプログラムです。はい、実際のPHPコードが1行も含まれていなくても可能です。

HTMLから始めて、少しずつPHPを少しずつ追加していくと、ここで説明しているスタイルになる可能性があります。それが、 リファクタリング がゲームに登場するところです:すべてが期待通りに実行されたら、可能な限り読みやすくなるようにコードを書き直してください。

私は、この最後のステップがないと幸せな人もいると思います。だからこそ、これはすぐには終わらないのです。

20
fuxia

PHPコメントではこれを避けていますが、テンプレートファイルでは熱心なPHPオープナー/クローザーです。別の方法は、PHP文字列を介してHTMLをエコーすることです。原始的な例として:

<!-- Example 1 -->
<ul>
    <?php
        foreach ( $list_items as $list_item ) {
            echo "<li><a href='" . $list_item->url . "'>" . $list_item->name . "</a></li>";
        }
    ?>
</ul>

<!-- Example 2 -->
<ul>
    <?php foreach ( $list_items as $list_item ) : ?>
        <li>
            <a href="<?php echo $list_item->url; ?>">
                <?php echo $list_item->name; ?>
            </a>
        </li>
    <?php endforeach; ?>
</ul>

例2はより冗長ですか?たぶん?しかし、私の意見では、読みやすく編集しやすいです。複雑なHTMLではどれだけugいものになるか想像できます。

また、補足として:PHPロジック間でHTMLを記述するときにendforeachおよびendifを使用すると、}と比較してtonが読みやすくなります。

12
Andy Adams

これは、ページを表示するかどうかの選択に関するものです。

  • 完全にPHPで生成されたエンティティとして
  • hTMLドキュメントテンプレートとして、PHP templateタグを使用

違う人は違う考え方をする傾向があります。純粋なPHPのブロックのように感じるので、関数がこのスタイルを使用することはめったにありません。一方、テンプレートでは珍しいことではありません。なぜなら、テンプレートはファイル全体に広がっており、純粋なHTMLの量はそれらの中のPHPの量よりも簡単に多いからです。

テンプレートエンジン(Moustache、Twigなど)を見ると、これらの構文は単純なPHPの冗長性を排除する傾向があることを除けば、このスタイルによく似ています。

PS私は sane HTMLにPHPを埋め込むことについて話しているのではなく、 文字通り 開始タグと終了タグ every に注目したいのですがそのためだけに。

10
Rarst

私の質問は:なぜですか?追加のタグをすべて含めるのはなぜですか。

答えは非常に簡単です:観客。プログラマーではなく人々がテーマをつかみ、インストールをFTPでアップロードし、5分のセットアップを実行するなどしている場合は、すでにプログラミングが好きです。その後、彼らが自分たちのテーマの中に なんでも の単一行を追加または変更したいときには、彼らはすでにHTMLとは何かを考え出しているかもしれません。 PHPはまだ彼らの手の届かないところにいるでしょう。だから私の推測では、この背後にある考え方は、要素が間違いを犯したときに転覆を破ることなく要素を簡単に追加または削除できるようにすることです。

注:これは私が好むもの、好まない、または推奨するものではありません。これがなぜ起こるのかというだけです。

2
kaiser

私は、何人かの新しいプログラマーがこのように訓練されていることを知りました。私はLyndaの40時間コースをフォローしています、そしてインストラクターは関数定義を除いて、すべての行にPHPタグを落としています。 HTMLとPHPの間にはっきりと線を引くことがおそらくでしょう。これは、新しい人がHTMLの終わりとPHPの始まりを理解するのに役立つはずです。その後は、おそらく習慣です。私は自分でそれに悩まされ始めていて、他の誰かが不平を言っているかどうかを確かめることにしました。

0
Kitt Parker