web-dev-qa-db-ja.com

PHP:if / for / while / ...を使用した角括弧または角括弧なし

これらの構文はどちらも正しく、同等です。

ブラケット付き:

foreach ($listOfThings as $thing) {
  echo $thing;
}

ブラケットなし:

foreach ($listOfThings as $thing):
  echo $thing;
endforeach;

次の2つの疑問が浮かび上がります。

  • それらの間に実際の違いはありますか、またはそれらは完全に同じですか(たとえば、パフォーマンス)?

  • コンテキストに応じて、常に同じものを使用するか、両方を使用する方が良いですか(たとえば、フレームワークに関するコードを簡単に認識できるようにするため)。

私はそれが好みと会社の基準の問題であると私は疑いますが、私はそれが確かではありません。

7
SteeveDroz

常に角かっこを使用する必要があります。短いループやifsでブラケットなしのコード(および一部のフレームワークも!)ブラケット。私の知る限り、どちらの方法でもパフォーマンスに大きな影響はありません。

これらの2つの追加キーは、コードを読んでいる人にとって、違いのある世界を意味します。

25
Jarrod Nettles

私の意見では、PHPコードを処理するだけの場合は、角かっこを使用する方が良いと思います。

foreachまたは別のタイプのブロック(ifwhileなど)を使用していて、HTML出力またはその他のものが存在する場合、「ブラケットなし」メソッドが好きですそこで。これは、途中に多くのコードが存在する可能性があり、何が終了しているかが明確になるためです。このため、このコーディングスタイルはWordpressテーマ開発者の間で標準になりました。(この例については、ここのコードをご覧ください。) The Wordpressループ )。

注:この質問は、「単一行ブロックにブラケットを使用する必要がありますか?」の質問とは異なります。ほとんどの言語には、複数行のブロックを区切る別の方法がありません。ほとんどの言語では、複数行ブロックには1つの方法(たとえば、中括弧)しかありません。

ここに私が「括弧なし」アプローチを使用したい場所の簡単な例があります:

<?php foreach ($listeOfThings as $thing): ?>
    <li><?= $thing ?></li>
<?php endforeach; ?>
13
dontangg

私はここでは少数派のようですが、中括弧よりendforeachendifなどを好みます。中括弧(最も近いまだ開いているブロックを閉じるだけ)とは異なり、閉じるステートメントを明確に指定します。

<? 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は、中括弧が一致しないことに気づく前にスクリプトの最後まで到達します。これは、ブレースがありません。

中かっこを好む人はすべて、「まあ、コードを適切にインデントすれば、中かっこも同じように読みやすい」と言えます。ただし、問題はいくつかあります。

  • 誰もがあなたと同じくらいコードのフォーマットについて信心深いわけではありません。特に、休暇中にコードを修正している新しい人。
  • 中かっこはではない「同じように読みやすい」。 ピリオド。C、C#、Java、またはブレースが良いことだと教えられた他の言語がどれだけ好きでも私は気にしません。実際のところ、制御構造にははるかに優れた構文があります-そしてPHPには実際には1つが含まれます。
    • 中かっこは句読点です。句読点の単一の文字。しばしば他の句読点に囲まれています。彼らは見逃しやすいです。脳が句読点を半分の時間だけ除外しようとしているように思えます。
    • あなたの編集者については知りませんが、私のサイトではキーワードを強調しています。それらは際立っており、より長いため、見つけやすくなっています。ブレースも強調表示され、一致するブレースも強調表示しようとします...しかし、ブレースをどれほど明るく色付けしても、ハイライトされたWord全体と同様に目立つことはありません。
    • 中括弧は「何かを閉じる」と言うだけです。彼らは何を閉じると言っていません。彼らは単にできない自分でその情報を伝えません。彼らは常に(ALWAYS!)インデントを「適切に」インデントすることに依存しており、そうしない(またはタブの代わりにスペースを使用する、またはスペースの代わりにタブを使用する)プログラマーを猛烈に倒します。スタイルです)。または、// end ifのようなコメントを追加することになります。そして、もしあなたがever自分がそのようなコメントを追加していることに気付いたら...なぜ地獄ではまったく同じことをするキーワードを避けますが、実際には通訳で確認されますか?
5
cHao

私はいつもブラケットを使うことを好みます。さまざまな言語で数百万行を使用した後、それらを使用しないとエラーが発生する可能性があると思います。最も一般的な間違いは、ブロックに実行する行を追加し、角かっこを追加し忘れたときに発生します。私はif句で自分自身でこの間違いを犯し、幸運にも最初の実行でそれを見つけることができました。それ以来、角括弧を使用しないことに戻ることはありませんでした。

1
Gus

角括弧なしの構文は、dontanggの回答で述べられているように、ループの間にHTMLコードを配置するのに適しています。コードを読みやすくします。

0
Cracker

常にブラケットを使用します。

Joelは、「間違った」コードを間違って見えるようにすることについての記事を書きました。技術的には、ブラケットを省略しても何も問題はありません。彼はこの正確なポイントをほんの少しだけ述べました...考えは、将来のバグにつながる可能性のあるシナリオではブラケットを使用しないことでした。たとえば、角かっこを使用せず、誰かがループに2番目のステートメントを追加することを望んでいるが、角かっこを忘れると、彼はバグを導入するとします。

http://www.joelonsoftware.com/articles/Wrong.html

0
Chu