web-dev-qa-db-ja.com

PHP HTMLのコードまたはPHPのHTMLを含める必要がありますか?

私のPHPコードをHTMLコード内またはPHP内のHTML内に記述するためのベストプラクティスは何ですか?

HMTL内のPHP:

 <p class="lead">Welcome to the <?= COMPANY_NAME ?> website.</p>

PHP内のHTML:

 <?php
      echo '<p class="lead">Welcome to the ' . COMPANY_NAME . ' website.</p>';
 ?>

パフォーマンスに違いはありますか?ベストプラクティスはどれですか。のように、これは最もよく維持されるコードを生成します。

またCOMPANY_NAMEはそのように定義されています:

define("COMPANY_NAME", 'MyCompany');
2
J_Strauton

何について:

どちらでもない

言語の混合は良い考えではありません。JavaScriptをHTMLに、またはHTMLをJavaScriptに、JavaScriptをPHPに、またはHTMLをPythonまたはRuby SQL。

なぜそうしないのですか?

なぜなら、異なる言語は通常、異なる層に対応するからです。

PHPはビジネスロジックを扱います。 HTMLは、ビジネスオブジェクトのプレゼンテーションを扱います。したがって、2つのレイヤーがあります。1つはオブジェクトを生成します。もう1つは、これらのオブジェクトの疑似XML表現を構築します。

同様に、JavaScriptはインタラクションを扱い、CSSはコンテンツのプレゼンテーションを扱います。インタラクションを変更する場合は、.htmlファイルを開かず、.phpファイルも開かないでください。jsファイルまたは.coffeeファイルを開きます。

同じファイル内にロジックを混在させると、コードの保守がますます難しくなることにすぐに気付くでしょう。製品にリベートを適用する方法を変更したい場合、HTMLとPHPステートメントを組み合わせたHTMLと、HTMLを含むPHPコードの組み合わせを15分かけて閲覧します。 。

技術的には、PHPによってHTMLとPHPを混在させることができるという事実は無関係です。この機能は歴史的な理由で利用できますが、今後は使用しないでください。

それであなたは何をすべきですか?

あなたが探しているものはtemplatesと呼ばれています。使用するフレームワークに応じて、テンプレートがビューにある通常MVCの形式ですでに使用可能であるか、または Smarty などのサードパーティのテンプレートエンジンを使用する必要がある場合があります。 =。

どちらの場合も、考え方は同じです。 PHPコードは、HTMLと非常に単純なロジックを含むテンプレートから完全に分離されています。エンティティに対する単純なループ、情報の条件付き表示の条件などです。PHPコードの準備ができたら、テンプレートエンジンを呼び出して、いくつかの情報を渡します。エンジンは特定のテンプレートを使用して最終出力(多くの場合HTMLですが、他の形式も可能)を作成して、ユーザーに送信します。

テンプレートを使用することで、ビジネスロジックと、テンプレートを介してこのロジックに与えるフォームを厳密に分離することができます。ある日、PHPコードの1行を変更することなく、これらすべてのテンプレートをスローして他のテンプレートを作成できます。または、モバイルバージョンのWebサイト用に多数のテンプレートを作成することもできます。

追加の利点は、HTMLに悩まされないことです。テンプレートを適用する代わりに、Webサイトの実際のWebページに実質的に1:1で基づくAPIを作成する必要がある場合は、テンプレートエンジンに送信されるオブジェクトをJSONにシリアル化します。実質的にゼロの努力で、API機能をアプリに追加します。これは、PHPとHTMLを混在させた場合、深刻な書き換えなしでは不可能でした。

4

この種の質問に対する明確な答えを得るよりも、スンニ派とシテ派の違いを解決できる可能性が高くなります。

私自身は、Reactのコンポーネントの概念とPHPのヒアドキュメント構文が好きです。

class CompanyComponent
{
    public function __construct($company)
    {
        $this->company = $company;
    }
    protected function escape($string)
    {
        return htmlspecialchars($string, ENT_COMPAT | ENT_HTML5, 'UTF-8');
    }
    public public function render()
    {
        $companyName = $this->escape($this->company['name']);
        return <<<EOT
<p class="lead">Welcome to the {$companyName} website.</p>
EOT;
    }
}
$companyComponent = new CompanyComponent(['name'=>'Trump']);
echo $companyComponent->render();
1
Cerad

最も読みやすいのはphpのhtmlですが、ほんの少しです。ファイルを2つの部分に分割する必要があります。トップのロジック。ここではすべての変数を準備しますが、htmlは準備しません。

下部には、変数とループを1つまたは2つ含むhtmlを配置しますが、ロジックはほとんどまたはまったくありません。

もちろん、これではそれほどうまく拡張できません。大規模なプロジェクトでは、おそらくmvcフレームワークを使用する必要があります。

0