3

私はPHPを初めて使用し、ほとんどの場合、HTMLを「エコー」しています。今日、私はそれを行うこの方法を見つけました。これにより、物事が1000倍簡単になります。

<?php if(get_field('field_name')){ ?>

   <p>HTML can go here without echo'ing it</p>

<?php } ?>

しかし、それは受け入れられた方法ですか?毎回動作するようです。ありがとう。

4

3 に答える 3

2

それは主にあなたがあなたのコードをどのように読むのが好きかについてです。

オートコンプリート/コード提案があるIDEでは <?php if (...) { ?>、オートコンプリート/提案機能がいつhtmlを使用するか、いつphpがコードに提案するかを知るために使用するのが最適です。そしてもちろん、後で読みやすいコーディングスタイルを選択するのは良いことです。
私の知る限り、コードのハイライトは機能せず、機能しないはずです。

echo '<div class="c"><h2>...';

さまざまなコーディングスタイル:

すでに述べたこと以外に大きな違いはありません。たとえば、

echo "<div>$var1<h1>$var2</h1>...";

変数を挿入する場合は、これよりも簡単で(書き込みが少なく)、コードのフットプリントが小さく、読みやすくなります。

<?php 
// <= Some code...
?><div><?php echo $var1; ?><h1><?php echo $var2; ?></h1>...

短いオープンタグ/使用しない理由:

ショートカットも<?= ?>利用できますが、PHP構成(常に利用可能/変更可能/書き込み可能とは限りません)の値short_open_tagを設定する必要があるため、使用していません。ただし、PHPのマニュアルには、「PHPの短いタグは使用できますか?」と記載されています。およびPHPエコーとPHPショートタグSince PHP 5.4.0, <?= is always available.

そして、ボンネットの下で何が見つかりましたか

内部のすべて<?php ?>がPHP:Hypertext Preprocessorによって解析されるため、使用するにははるかに多くのリソースが必要であると誰かが言うかもしれませんが、100000または'echo '<html><here>';を超えていない場合、最適化を行うにはこれも間違った場所です+開始と終了に必要な手順はほとんどありません少なくとも私のインストールでは、CPU命令を数えるときも、ほとんど同じです 。PHPスクリプトはどの程度正確に実行されますか?を参照してください。およびphp.net/manual/en/tokens.phpおよびPHPコンパイラ内部のスライド(Sebastian Bergmannによる)echoprint<?php?>echo


パフォーマンスに関するいくつかのテスト:

1.77秒:1 000000回$var = rand(0, 1); echo 'Foo Bar '.$var;
1.61秒:1 000000回$var = rand(0, 1); ?>Foo Bar <?php echo $var; ?><?php
1.83秒:1000000回$var = rand(0, 1); echo "Foo Bar $var";

私は本当にあなたがあなたのコードをどのように書いたり読んだりするのが好きかが最も重要だと思います。書く方が良い場合もあれば、後で読む方が良い場合も
if (...) { echo "something"; }
あります。
<?php if (...) { ?>something<?php } ?>

個人的にecho "...";は、変数が多い場合や印刷されるテキストが小さい場合や、変数が少ない?>...<?phpHTMLの大きな塊や長いテキストを出力する場合に使用することを好みます。これにより、コードが読みやすくなります。

コメントで言及されているアクセラレータについて:

私が正しく理解した場合、phpは最初に字句解析を行い、結果をアクセラレーターに渡します。この観点からする?>text<?phpと、echo "text";大きな違いがありますが、通常のWebサイトプロジェクト内のパフォーマンスは変わりません。
より明確に:アクセラレータ自体はパフォーマンスを向上させますが、使用する?>text<?phpecho "text";、大きな違いはありません。

最終的な答え:

はい、広く受け入れられて使用されていますが、(少なくともPHPドキュメントから明確なものは何も見つかりませんでした)まだ文書化されていない方法だと思います。ただし、すでにご存知のとおり、それは唯一の方法ではありません。基本的に、echoを使用する場合と同じように機能します。

if ( get_field('field_name') ) {
   echo "<p>HTML can go here by echo'ing it</p>";
}

公式ドキュメントを見つけようとしている間、私はこれらのページを読みました:
php.net/manual/en/control-structures.alternative-syntax.php
php.net/manual/en/language.basic-syntax.phpmode.php
php.net/ manual / en / language.types.string.parsing.complex
はgoogleを使用し、いくつかのフォーラムを検索しました。

明確に文書化された代替方法はそれほど頻繁には使用されていないようです。

<?php if ($a == 5): ?>
A is equal to 5
<?php endif; ?>

アップデート:

条件付きステートメントによる分離{および条件付きステートメント内の公式ドキュメントは次のとおりです。control -structures.introlanguage.basic-syntax.phpmode.phpが一緒にドキュメント化されていますが、それを行う別の方法のデモンストレーションのみがあります(上記を参照)。}<?php?>

于 2012-05-02T10:13:25.480 に答える
0

です。ただし、すべてのファイルの末尾を省略することも標準になっている?>ため、出力の末尾に空白や行の末尾はありません。

<?php if(get_field('field_name')){ ?>

   <p>HTML can go here without echo'ing it</p>

<?php }

php.iniで有効になっている場合は、(<?の代わりに<?php)短いタグを使用することもできます

于 2012-05-02T10:02:03.650 に答える
-1

制御構造には代替構文を使用することをお勧めします。

于 2012-05-02T09:59:37.163 に答える