web-dev-qa-db-ja.com

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

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

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

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

編集:これはNULLnullにも当てはまることを忘れていました。

122
Austin Hyde

official PHP manual のコメント:

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

そう、true === TRUEfalse === FALSE

ただし、個人的には、読みやすさの理由から、TRUEよりもtrueおよびFALSEよりもfalseの方が好きです。 ORまたは||よりもorを使用すること、およびANDまたは&&よりもandを使用することを好むのと同じ理由です。

PSR-2 標準では、truefalse、およびnullを小文字にする必要があります。

81
Lukman
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 (および 6f76b17079a709415195a7c27607cd52d039d7c

104
Radu

小文字を使用します。

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

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

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

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

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

PSR-2標準 によると:

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

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

9
Mandrake

[〜#〜] psr [〜#〜] バンドワゴンに乗るまで、すべてのキャップですべてのconstのようなCスタイルのTRUE/FALSEブール値を使用していました。

PSR-2のセクション2.5:

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

したがって、基本的に、オープンソーススタイルの詳細でNiceをプレイする場合は、ブール値を小文字にする必要があります。

9
Todd

trueTRUEとまったく同じです。 falsenullについても同様です。私はそれがどんな点でも重要だとは聞いていません。

混乱させる唯一の方法は、それらの値を引用することです、例えば:

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

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

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

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

5
Tatu Ulmanen

false[〜#〜] false [〜#〜]の違いをチェックする簡単なコードを書きました:各反復は次のようなことをしていました:

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

結果は次のとおりです。

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

そのため、ブール値の場合、パフォーマンスがわずかに影響を受けることがわかります。小文字の方が高速です。しかし、確かに表示されません。

5
Arkadij Kuzhel

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

ただし、頭に浮かぶ大文字を使用する利点の1つは、大文字を使用してコード内で簡単に見つけられることです。

4
RMcLeod

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

2
Conrad

これは、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回勝ちました。私の環境では大文字の方が高速です。

0
Abbas Uddin