大文字のブールとPHPの小文字


135

私はPHPを学んでいたとき、私はあなたが常にブール値の大文字バージョンを使用する必要があることをどこかで読ん、TRUEおよびFALSE「通常」の小文字バージョン、ので、trueとはfalse、使用しても「安全」はありませんでした。

もう何年も経っており、私が書いたすべてのPHPスクリプトは大文字バージョンを使用しています。しかし、小文字バージョン(つまりZend Framework)で書かれた多くのPHPを見たので、今、私はそれを疑っています。

大文字バージョンを使用する理由はありますか、それとも小文字を使用してもまったく問題ありませんか?

編集:これが適用されることに言及し忘れたNULLnull同様。


4
小文字で書く方が「はるかに速い」と言われているサイトはたくさんありますが、深刻な情報源は引用されていません。何かが出てくるかどうかを確認することに興味があります。
Pekka

2
それは真実ではない。私は500万回の繰り返しでそれをテストし、どちらも同じ結果、私のPC上で0.5秒与えた:P
アレックス

9
@Alex Pekkaは、小文字のブール値の実際の書き込みが高速であることも意味します。それは理にかなっており、より少ないキーを使用する必要がある。ただし、違いはわずかです。
Martti Laine

申し訳ありませんが、あなたに投票した後、誤って投票しました。
SIFE

1
興味深い観察:var_export()はtrueおよびfalseを小文字として書き込みますが、NULLは大文字として書き込みます。素敵ですね 3v4l.org/6Oelk
ドンキホーテ2015

回答:


89

公式のPHPマニュアルには書かれています:

ブールリテラルを指定するには、キーワードTRUEまたはFALSEを使用します。どちらも大文字と小文字を区別しません。

そうそう、true === TRUEそしてfalse === FALSE

個人的に、しかし、私が好むTRUE超えるtrueFALSEオーバーfalse読みやすさの理由のために。これは、使用しての私の好みのためのと同じ理由だOR以上orまたは||、および使用上のANDオーバーand&&

PSR-2規格は必要truefalseかつnull小文字であること。


81
ちょうどそれを指摘したいOR||(のように、彼らは異なる優先順位を持つ)PHPで異なる演算子である、などですAND&&。(したがって、たとえば、代入演算子よりも優先順位が高く&&なり||ますがOR、そうでANDはありません。)
Johrn

21
また、今日のIDEでは、ほとんどのIDEの構文強調表示機能として純粋な大文字のブール値を使用する理由がわかりません。
RobertPitt 2010

37
小文字で入力する方がいいので、Shiftキーを押す必要はありません。
ACK

6
私は小文字も好きです-Javaのようですが、それぞれにあります。私は彼らが一方的に落ち着いて、私たち全員をどちらか一方に切り替えるようにしたいと思います!!!!!! これは本当に必要な柔軟性ではありません!
レイ

5
@Cyril:PHPを嫌うことに十分な理由はたくさんあります(たとえば、上記のJohrnのことを参照してください。私はそのことを知りませんでした)が、基本的に大文字と小文字を区別しないことを考えると、大文字と小文字が混在することに奇妙なことはありません表現は同じです。何、それは一般的な無感覚の場合、感度およびケース鈍感をミックスしていること、しかし、ナンセンス。(例:stackoverflow.com/questions/5643496/…を参照)
Sz。

110
define('TRUE', false);
define('FALSE', true);

幸せなデバッグ!(PHP < 5.1.3(2006年5月2日)デモを参照)

編集:大文字のブールは定数で、小文字は値です。定数ではなく、簡単に変更できる値に興味があります。


Eliminated run-time constant fetching for TRUE, FALSE and NULL

author      dmitry <dmitry>
            Wed, 15 Mar 2006 09:04:48 +0000 (09:04 +0000)
committer   dmitry <dmitry>
            Wed, 15 Mar 2006 09:04:48 +0000 (09:04 +0000)
commit      d51599dfcd3282049c7a91809bb83f665af23b69
tree        05b23b2f97cf59422ff71cc6a093e174dbdecbd3
parent      a623645b6fd66c14f401bb2c9e4a302d767800fd

コミットd51599dfcd3282049c7a91809bb83f665af23b69(および6f76b17079a709415195a7c27607cd52d039d7c3


7
-1です。A)これは無意味です。B)これは質問に答えません。およびC)正しい答えをすでに受け入れていますが、これには追加の役立つ情報はありません。
オースティンハイド

36
次に、詳細に説明します。大文字のブールは定数で、小文字は値です。定数ではなく、簡単に変更できる値に興味があります。だから、もしあなたがテキストを少し考え、ペナルティを与えるために急いでいなかったら、おそらくこれを理解したでしょう。
ラドゥ

13
あなたが今言っている点は理解できましたが、最初にそれを作った方法は(IMO)不可解で無意味でした。もともとあなたがあなたの編集を答えにしただけだったら、これは実際には非常に良い点なので、私は賛成票を投じていただろう。
オースティンハイド

4
これが正解です。これでポイントがもらえるはずです。
シリアルワーム

22
編集については、その説明は誤解を招く...実際の値そのものビットである(トークンにダウンコンパイルさT_NULLT_TRUEおよびT_FALSE解析時)、大文字と小文字を区別しませんので、使用してNULL---実際には「定数」ではありませんしない限り、あなたが作るそれ定数、使用しますdefine()。単に使用しNULLたりTRUE、定数であることを意味したりしません。そのような定数がないかのように、PHPは定数をリテラルとして解釈します。より正確な説明は、小文字のバージョン再定義できませんが、他の大文字と小文字のバリエーションは可能です。
Joe、

31

小文字を使用してください。

  1. 入力する方が簡単です。(IMO)
  2. 読みやすいです。(IMO)
  3. JavaScriptのブール値は小文字で、大文字と小文字が区別されます。

6
+1; 私はちょうどJavascript引数を追加することでした:WebプログラミングではPHPとJSコードの両方を書くことは非常に一般的であるため、十分に開発されたWeb開発の指の筋肉は、最後の言語のコンテキストで使用されるのと同じ大文字小文字を日常的に適用し続けます。少なくとも、PHPから切り替えた後、JavascriptでTRUEまたはFALSEを書くことがよくありました。PHPで小文字を使用すると、この問題は完全に修正されました。
Sz。

11

JSONを使用する場合、RFC7159は次のように述べています。

リテラル名は小文字でなければなりません。他のリテラル名は許可されていません。

PHP 5.6の下位互換性のない変更のリストから:

json_decode()は、JSON仕様に従って、小文字以外のJSONリテラルtrue、false、nullを常に拒否するようになりました

PSR-2標準によると:

PHPキーワードは小文字でなければなりません。

PHP定数true、false、nullは小文字でなければなりません。


正解ですが、この質問は特にJSONではなくPHPの大文字/小文字のブール値に関するものでした。たとえば、json_encode(TRUE)json_encode(true)yieldの両方'true'です。
オースティンハイド

3
JSONについて言及して申し訳ありません。これらの参照をすべて削除し、PSR-2についてのみ言及した方がよいでしょうか?
Mandrake、2015年

4
PHPで頻繁にjavascript / JSONを使用していて、一貫性を探している可能性があるため、JSONへの参照は適切だと思います。
Doug Kress、2015

9

私は、PSRバンドワゴンに乗るまで、すべてのconstのようなCスタイルのTRUE / FALSEブール値をすべて大文字で使用していました。

PSR-2のセクション2.5:

PHP定数true、false、nullは小文字でなければなりません。

したがって、基本的に、オープンソーススタイルの細部をうまく処理したい場合は、ブール値を小文字にする必要があります。


5

それは問題でtrueはなく、とまったく同じTRUEです。同じことがのために行くfalsenull。それがいつでも問題になるとは聞いていません。

物事を台無しにできる唯一の方法は、それらの値を引用することです。例えば:

$foo = false;   // FALSE
$bar = "false"; // TRUE

$foo2 = true;   // TRUE
$bar2 = "true"; // TRUE

$foo3 = null;   // NULL
$bar3 = "null"; // TRUE

大文字または小文字の使用を制限または奨励するのは、会社または独自のコーディングガイドラインだけかもしれません。それ以外は、どちらでも自由に使用でき、問題は発生しません。


FALSEとNULLは同じではありません。is_null()は、値=== FALSEの場合、trueを返しません。
Noah Goodrich

9
@Noahグッドリッチは、私は、任意の時点でそれを示唆するものではありませんでしたfalsenull同じになります。私は「同じのために行くと言ったfalsenullの両方が低いか大文字で表現することができることを意味しています、」。
Tatu Ulmanen、2010年

5

falseFALSEの違いを確認する簡単なコードを書きました。各反復で次のようなことが行われていました。

    for ($i = 0; $i < self::ITERATIONS; ++$i) {
       (0 == FALSE) ;
    }

結果は次のとおりです。

Iterations: 100000000
using 'FALSE': 25.427761077881 sec
using 'false': 25.01614689827 sec

したがって、パフォーマンスがブール値のケースにわずかに影響されていることがわかります。小文字の方が高速です。しかし、確かにあなたは見ていないでしょう。


どのJSエンジン?現在、JSは実行前にメモリでコンパイルされます。
Tiberiu-Ionuț Stan 2013

1
PHPは実行前にトークン化され、時間に違いはありません。別の答えは、アッパーがより速いことを示しました。どのテストでも、この大きさの違いは無視する必要があります。この違いは、反復ごとに2.5e-7です。
Doug Kress

4

個人的には常に小文字の形式を使用してきましたが、コードをすっきりさせるため以外に特別な理由はありません。キャメルケースのクラス名と変数名を大文字にするのは、キャメルを使用する唯一の場所です。

ただし、頭に浮かぶ大文字を使用する利点の1つは、大文字が突出し、コード内で見つけやすいことです。


2
整理整頓の場合は+1。すべての大文字の伝統はCから来ていますが、そろそろ醜い形を取り除く時が来ました。
ペトルザ

2

私は同じことを自問しながら、この古い質問に出くわしました。define( 'TRUE'、false); define( 'FALSE'、true);の良い点 ただし、php5には適用されません。これらの行をphp5コードで書くのは、コメントを書くようなものです。


6
将来の参考のために、これを「回答」として投稿しました。StackOverflowでは、従来のフォーラムとは異なり、実際に質問の解決策として機能せず、役立つ情報を提供しない会話型の投稿は、元の質問または関連する回答のいずれかにコメントとして投稿する必要があります。この場合、あなたの投稿は回答よりも私の質問へのコメントに適しています。
オースティンハイド

8
PHP 5ではこれが機能しないことを知っておくと役に立ちます:P
Alex

1

これがWindows 7x64bit Apache / 2.4.9 PHP / 5.5.14での私のテストです

$blockLimit = 50;
while($blockLimit > 0): $blockLimit--;

//STAR Here ================================================

$msc = microtime(true);
for ($i = 0; $i < 100000; $i++) {
   echo (FALSE);
}
echo 'FALSE took ' . number_format(microtime(true)-$msc,4) . " Seconds\r\n";
$msc = microtime(true);
for ($i = 0; $i < 100000; $i++) {
   echo (false);
}
echo 'false took ' . number_format(microtime(true)-$msc,4) . " Seconds\r\n";

echo "\r\n --- \r\n";
//Shutdown ==================================================
endwhile;

今回はFALSEが20回勝った。したがって、私の環境では大文字の方が高速です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.