どちらが良いか:HTMLをPHPコードの内部に含めるか、外部に含めるか?


28

これを見てください:

<?php
echo "Hello World";
?>
<br />
<?php
echo "Welcome";
?>

そして、これを見てください:

<?php
echo "Hello World";
echo "<br />";
echo "Welcome";
?>

上記の例のどれが(少なくともパフォーマンスの観点から)より良いと考えられますか?

私は例が些細なものであることを知っていますが、良い習慣を最初から守りたいので、より多くの行があればパフォーマンスや悪影響に影響しないようにします。


14
これはPHPではあまり人気がないようですが、他のエコシステムでは両方とも悪いと考えられており、適切な代替策は、動的な部分を含む最小限のロジックですべての静的な部分のテンプレートを作成し、プログラミング言語。

1
@delnan-それを答えとして、少し拡張した形で投稿することを検討すべきです。それはとてもきれいです。
jmort253

@ jmort253考えましたが、PHPの知識はほとんどないため、PHPの世界でのベストプラクティスについて話すことはできませんでした。

どのような問題を解決しようとしていますか?
ジムG.

パフォーマンスの点では重要ではありません。ネットワークは比較して非常に遅いです。転送コストは非常に高いため、生成コストは比較して重要ではありません。
マーティンヨーク

回答:


23

コメントが指摘しているように、それはテンプレートによって行われるべきです。ただし、2つの選択のみが可能な場合。ケース1の方が良いでしょう。これは、xmlによるandroid inflating layoutまたはプログラムでUIを作成するのと同じ概念です。あなた<br/>はあなたのhtmlからの静的なコンテンツであり、あなたのサーバーはそれを表示するだけです。ただし、phpを使用して実行すると、サーバーリソースを使用してコンピューティングが実行されます。

これがどのように行われるべきかです:index.php:

<?php
include 'header.html';
...
include 'footer.html';  
?>  

header.htmlおよびfooter.htmlはテンプレートです。


1
私は、コントローラーとテンプレートと呼ばれるものについての「PHP&MySQL初心者から忍者」であるKevin Yankの本を読みました。これらはあなたが私に話していたのと同じものですか、それとも違うのですか?それらが同じである場合、異なるファイルにコードを入れるとパフォーマンスが向上しますか?
ラシッド

テンプレートを使用すると、Webサイトまたはアプリケーションがより柔軟になります。StackOverflowのヘッダーとフッター、さらにはポストが同じであることがわかりますか?彼らは同じテンプレートを使用しており、動的データを入力しています。
wtsang02

その背後にある主な理由は何ですか?そうしないとどうなりますか?何を失いますか?
ラシッド

これを見てみましょう。これは、この回答投稿の4番目のコメントです。今すぐこのページをソースで表示すると、「<div> <span ...> ... </ span> <a ...> ... </a>」と表示されます。4000番目のコメントをコーディングする手。それは可能ですか?または、これをテンプレートとして作成し、必要に応じてサーバーに「追加」させます。
wtsang02

1
また@wtsangこれらの2つの選択肢があり、あなただけ、あなたは常に第三、実行を持っていません(または学ぶ。)
ocodo

54

質問に直接回答するには:静的テキストまたはHTMLをエコーしないでください。PHPの外部に置きます。

<?php echo "<p>Hello World</p>"; // Alway wrong. ?>

<p>Hello World</p>  <!-- Does the same thing, faster, and is more readable. -->

静的テキストまたは静的htmlを渡すだけであれば、PHPへのエスケープは無駄です。内部のすべてのコード<?php ?>はPHPに送信され、解釈されます。これは、理由もなくPHPに大量の静的テキストを渡す場合、Webサイトが遅くなり、電力を浪費していることを意味します。(理由がある場合があります。)

ベストプラクティスは、HTMLを使用せず、PHPのみを使用して、ロジックとうなり声をファイルで処理することです。

私がこれをしたいのは、MVCフレームワークを使用する方法です。モデルとコントローラーには純粋なPHPがあり、ビューにはHTMLとPHPが混在しています。MVCフレームワークは必要ありません。HTMLの混合物をテンプレートファイルに貼り付けるだけで、純粋なPHPファイルに含めることができます。

変数(HTMLを含まない)を純粋なPHPファイルで作成したら、HTMLを使用して変数をファイルに渡すことができます。そこだけで、HTMLとPHPを混在させることは問題ありません。しかし、これは重要ですが、HTMLを含むファイルを使用する場合は、PHPを最小限に抑えてください。

幸いなことに、PHPには、htmlと混合したときにPHPを読みやすくするための使いやすいツールが付属しています。

代替構文

ベストプラクティスは、純粋なPHPを記述する場合は通常のPHP構文を使用することですが、PHPとHTMLを混合する場合は代替構文を使用することです。

HTMLのない通常のPHPファイルの場合:

if ($something) {
  do_something(); // do_something() shouldn't echo or print.
}

これは純粋なPHPにとっては美しいことですが、HTMLからエスケープする場合には理想的ではありません。特に、閉じブレースは、HTMLの大きな山に現れるときに理解するのが難しいことがよくあります。

あなたの質問に基づいて、HTMLとPHPを混合したファイルに次のように書いたようです。

<?php
  if ($something) {
    echo '<p>Hello World.</p>';
  }
?>

上記の理由により、HTMLをPHPに送信しないようにします。これを次のように行います。

<?php if ($something) { ?>
  <p>Hello World.</p>
<?php } ?>

PHPタグからHTMLを取得しましたが、これは改善点です。しかし、さらに先へ進むことができます。

閉じ括弧がどれほど有益でないか気づきましたか?ループを閉じているのか、ifステートメントを閉じているのかはわかりません。上記の例ではこれはささいなことのように思えますが、ループ/エンドループ内のif / endifの中には何十行ものHTMLがしばしばあります。

ベストプラクティスは、PHPとHTMLを混合したファイルでは、開き括弧と閉じ括弧を省略した代替構文を使用することです({ })。

<?php if ($something): ?>
  <p>Hello world.</p>
<?php endif; ?>

別に(新しい構文の意味論から:endif;代わりに{して})、あなたは2つのことに気づくはずです。

  1. 繰り返しますが、HTMLとテキストはPHPによって制御されますが、<?php ?>タグの外側にあるため、解釈されません。上記の理由により、これは良いことです。
  2. これは<?php } ?>、開いている場所を見つけるのが難しいものを閉じるランダムな中括弧()を含むすべてのPHPである場合よりもはるかに有益です(多くの乱雑なHTMLと混在しているため)。繰り返しますが、ループとifステートメントを含む大きなHTMLファイルを想像してください。何を閉じるかを指定すると、多くのことがわかります。

ループにも同じテンプレートフレンドリーな構文を使用できます。

<?php foreach ($things as $thing): ?>
  <li><?php echo $thing; ?></li>
<?php endforeach; ?>

短いタグ

PHPが提供するもう1つの優れたツールは、やはりPHPとHTMLを一緒に使用する場合にのみ使用する短いタグです。php.iniファイルで短いタグをオンにする必要がある場合があります。オンにすると、短いタグによりすべてがさらに読みやすくなります。

短いタグがなければ、書く必要があります<?php echo $something; ?>が、短いタグでは書くことができ<?=$something?>、まったく同じ結果になります。

短いタグと代替のPHP構文を組み合わせると、PHP要素を含むエレガントなHTMLファイルを実際に作成できます。最後のループの例(ループ内の一部)を使用すると、短いタグを使用すると以下を削減できます。

<li><?php echo $thing; ?></li>

<li><?=$thing?></li>

はるかに読みやすいです。

さらに先に進むことができますか?はい。さまざまなテンプレートシステムを使用すると、次のようなことができます。

<li>{thing}</li>

これは驚くほど読みやすいです。ただし、テンプレートシステムは元の質問(とにかく前に残しました)の範囲外です。


4
+1すべての人に良いアドバイスをするため。代替制御構文と短いタグは、テンプレートを開始し、ロジックをプレゼンテーションから分離するために非常に重要です。
ウィルメルドン

1
短いタグは注意して使用する必要があります。再利用するコードをビルドしている場合、short_open_tagディレクティブが常にオンになることを保証できません。PHP 5.4は、無効になっ<?=$thing?>ている場合でも常に利用可能にしshort_open_tagます。また、short_open_tagXMLとの競合を防ぐために、デフォルトでオフに設定されています。
クリス

3
さまざまな代替案を示し、ベストアンサーに進むための+1。
トーラOdejayi

1
以前は本当だったかもしれませんが、PHP7でオペコード(つまり、実際にエンジンで実行されるもの)をチェックしただけで、PHP / HTMLを混合しても、静的テキストを渡すことを避けて電気を節約しません。<?php $foo='ABC'; echo '<div>', $foo, '</div>'そして<?php $foo='ABC'; ?><div><?=$foo?></div>すなわち、それらはしている同じ、まったく同じオペコードになります。
ジョシュカリブー

テンプレートシステムに関するメモで、あなたの例を可能にする最も単純なテンプレートアプローチは、単純なheredocです。ヒアドキュメント<li>{$thing}</li>では、二重引用符よりも有利な点を示したように、その中にある二重引用符をエスケープする必要はありません。また、heredocを割り当てたり、関数に渡すこともできます。したがって、ブロックで使用する場合は、php / htmlのほうがずっときれいです。array_reduce($items, function($s, $item) { $name = htmlspecialchars($item['name']); return $s . <<< EOT <li>{$name}: {$item['price']}</li> EOT; })
ジョシュ、カリブー

4

PHPページのパフォーマンスを忘れてしまいました。代わりに、読みやすい方法を選択してください

2つの例を見ると、2番目の例を読むのが最も間違いなく最も簡単ですが、これは使用した間隔のためだと思います。あなたは最初から良い習慣を身につけたいと思っていると言いますが、あなたのコードを読みやすくすることであなたの時間をより良く使えると思います。これは、満足するまでセクションを数回書き換えることを意味する場合があります。

舞台裏に本当に興味がある場合は、PHPページの静的コンテンツで何が起こるかを説明します。最初のことの1つは、ページ全体を実行可能なコードに「解析」することです(<?php ?>タグの間に表示されるように)。これの一部は、静的テキストをに変換することechoです。

したがって、この:

<?php echo "Hello World"; ?>
<br />
<?php echo "Welcome"; ?>

次のようなものに変換されます。

echo "Hello World";
echo "<br />";
echo "Welcome";

解析に関連するコストは非常にわずかですが、結果のコードの実行に違いはありません。PHPアクセラレーターを使用している場合、解析は一度だけ行われ、その後キャッシュされるため、最初のページのロード後にパフォーマンスの違いは見られません。

覚えておいてください:読みやすい!


1
同意しません。パフォーマンスだけでなく、実際に学習することです。間違った練習を学ぶのは良いアドバイスではありません。
アイザック

「静的テキスト」がに変換されるのは本当ではありませんecho。文字通り(あなたの言語が意味する)を意味する場合。結果は同じですが、方法は大きく異なります。「静的テキスト」と呼ぶものは、実際にはPHPからHTMLにエスケープします。これが発生すると、サーバーは生テキストの送信を開始します。PHPを使用した場合のように、PHPを介して解析しませんecho。パフォーマンスへの影響は、想定外の状況ではおそらく小さいですが、メカニズムの違いは重要です。
underscore_d

0

PHPの最も優れた機能の1つは、HTMLに埋め込むように設計されていることです。通常、テンプレートの作成に使用されます。PHPコードとHTMLが分離されるため、コードの読み取りと保守が容易になります。

しかし、「Hello World!」のような静的ページのみを印刷する場合 それは悪い考えです。


0

あなたの質問に簡単に答えるために:あなたのサンプルコードを考えると、パフォーマンスの違いはほとんどありません。PHPはサーバー/ホストレベルで処理されますが、HTMLはユーザーエージェント/ユーザーがブラウザーでWebページを見ている人によって処理されます。誰が速くなりますか?判断が難しい。

私は、それぞれに長所と短所があり、本当にうまく連携できると言っていることに同意します。PHPはプログラム可能で、計算を行って変数を処理できます。そのため、私のページはすべてPHPになり、HTMLコードのスニペットを呼び出します。前述のテンプレートは変数を挿入して、HTMLを動的にします。

この例では、HTMLを次のように1つのPHPステートメントにまとめることができます。

    <?php echo "Hello World<br>Welcome"; ?>

少しわかりやすくなることを願っています。


0

PHP内でHTMLを使用するには制限があります。

ほとんどの場合、HTMLは外部にあります。PHPを使用していない場合と同じようにページを作成し、PHPをドキュメントの必要な領域に追加します。1つのドキュメント内に複数のPHPチャンクを含めることができます。

HTML内でPHPを操作する例がいくつかあります。

https://www.thoughtco.com/php-with-html-2693952


-1

一般に、PHPからHTMLコードを出力するのは適切ではないと考えられています。これにはいくつかの理由がありますが、主な理由は、特に長い目で見れば、HTMLコードとPHPコードが分離されている場合にコードを維持することが簡単だからです。

HTML、CSS、およびJavascriptに似ています。分離しておく方がはるかに簡単で実用的です。

ただし、技術的には、出力方法にまったく違いはありません。PHPにとっては、バイトが連続しています。


6
それは違いを生みます。<?php echo 'hello'; ?>PHPに渡されます。helloPHPに渡されません。PHPに渡されるものはすべてバイトコードに変換され、解釈されます。これには時間がかかり、処理能力と電気が必要です。
テッド
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.