web-dev-qa-db-ja.com

PHPコードの内部または外部にHTMLを含めるのはどちらが良いですか?

これを見てください:

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

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

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

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

例は取るに足らないものであることはわかっていますが、最初から良い習慣を身につけたいので、行が増えてもパフォーマンスに悪影響を及ぼさないようにします。

28
rashed

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

これを行う方法は次のとおりです:index.php:

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

header.htmlとfooter.htmlはテンプレートです。

23
wtsang02

あなたの質問に直接答えるには:Never静的テキストまたはHTMLをエコーし​​ます。これはPHPの外に置いてください。

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

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

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

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

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

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

幸いなことに、PHPには、HTMLと組み合わせるとPHPを読みやすくするためのフレンドリーなツールが付属しています。

代替構文

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

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

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>

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

55
Ted

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

2つの例を見ると、2番目の例が最も読みやすいのは間違いありませんが、これは、使用した間隔のせいだと思います。最初から良い習慣を身につけたいとおっしゃっていますが、コードを上手に読むことで、時間をよりよく使うことができると思います。これは、満足するまでセクションを何度か書き換えることを意味します。

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

したがって、この:

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

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

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

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

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

4
GavinH

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

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

あなたの例では、HTMLを1つのPHPステートメントにまとめることができます:

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

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

0

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

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

0
4ldrich

pHP内でのHTMLの使用には制限があります。

ほとんどの場合、HTMLは外部にあります。 PHPを使用していない場合と同じようにページを作成し、PHPをドキュメントの必要な場所に追加します。PHPドキュメント内。

PHP HTML内での作業にはいくつかの例があります:

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

0
Purvi Barot