これらの構文はどちらも正しく、同等です。
ブラケット付き:
foreach ($listOfThings as $thing) {
echo $thing;
}
ブラケットなし:
foreach ($listOfThings as $thing):
echo $thing;
endforeach;
次の2つの疑問が浮かび上がります。
それらの間に実際の違いはありますか、またはそれらは完全に同じですか(たとえば、パフォーマンス)?
コンテキストに応じて、常に同じものを使用するか、両方を使用する方が良いですか(たとえば、フレームワークに関するコードを簡単に認識できるようにするため)。
私はそれが好みと会社の基準の問題であると私は疑いますが、私はそれが確かではありません。
常に角かっこを使用する必要があります。短いループやifsでブラケットなしのコード(および一部のフレームワークも!)ブラケット。私の知る限り、どちらの方法でもパフォーマンスに大きな影響はありません。
これらの2つの追加キーは、コードを読んでいる人にとって、違いのある世界を意味します。
私の意見では、PHPコードを処理するだけの場合は、角かっこを使用する方が良いと思います。
foreach
または別のタイプのブロック(if
、while
など)を使用していて、HTML出力またはその他のものが存在する場合、「ブラケットなし」メソッドが好きですそこで。これは、途中に多くのコードが存在する可能性があり、何が終了しているかが明確になるためです。このため、このコーディングスタイルはWordpressテーマ開発者の間で標準になりました。(この例については、ここのコードをご覧ください。) The Wordpressループ )。
注:この質問は、「単一行ブロックにブラケットを使用する必要がありますか?」の質問とは異なります。ほとんどの言語には、複数行のブロックを区切る別の方法がありません。ほとんどの言語では、複数行ブロックには1つの方法(たとえば、中括弧)しかありません。
ここに私が「括弧なし」アプローチを使用したい場所の簡単な例があります:
<?php foreach ($listeOfThings as $thing): ?>
<li><?= $thing ?></li>
<?php endforeach; ?>
私はここでは少数派のようですが、中括弧よりendforeach
、endif
などを好みます。中括弧(最も近いまだ開いているブロックを閉じるだけ)とは異なり、閉じるステートメントを明確に指定します。
<? if (someCondition): ?>
imagine a bunch of code here
<? foreach ($rows as $row): ?>
imagine a bunch more code here
<? endforeach ?> (without this, PHP complains about "unexpected T_ENDIF")
and a bunch more here
<? endif ?>
<? if (someCondition) { ?>
imagine a bunch of code here
<? foreach ($rows as $row) { ?>
imagine a bunch more code here
<? } ?> (without this, PHP complains about "unexpected $end")
and a bunch more here
<? } ?>
最初の例では、エラーはif
ブロック(およびその内部にあるもの)にかなり限定されており、PHPはより早くチョークします(したがって、実際のエラーです。2番目の例では、PHPは、中括弧が一致しないことに気づく前にスクリプトの最後まで到達します。これは、ブレースがありません。
中かっこを好む人はすべて、「まあ、コードを適切にインデントすれば、中かっこも同じように読みやすい」と言えます。ただし、問題はいくつかあります。
// end if
のようなコメントを追加することになります。そして、もしあなたがever自分がそのようなコメントを追加していることに気付いたら...なぜ地獄ではまったく同じことをするキーワードを避けますが、実際には通訳で確認されますか?私はいつもブラケットを使うことを好みます。さまざまな言語で数百万行を使用した後、それらを使用しないとエラーが発生する可能性があると思います。最も一般的な間違いは、ブロックに実行する行を追加し、角かっこを追加し忘れたときに発生します。私はif句で自分自身でこの間違いを犯し、幸運にも最初の実行でそれを見つけることができました。それ以来、角括弧を使用しないことに戻ることはありませんでした。
角括弧なしの構文は、dontanggの回答で述べられているように、ループの間にHTMLコードを配置するのに適しています。コードを読みやすくします。
常にブラケットを使用します。
Joelは、「間違った」コードを間違って見えるようにすることについての記事を書きました。技術的には、ブラケットを省略しても何も問題はありません。彼はこの正確なポイントをほんの少しだけ述べました...考えは、将来のバグにつながる可能性のあるシナリオではブラケットを使用しないことでした。たとえば、角かっこを使用せず、誰かがループに2番目のステートメントを追加することを望んでいるが、角かっこを忘れると、彼はバグを導入するとします。