PHPを学習していたとき、「通常の」小文字バージョンTRUE
およびFALSE
は使用しても「安全」ではなかったため、常に大文字バージョンのtrue
およびfalse
を使用する必要があることを読みました。
それはもう何年も経ち、私が書いたすべてのPHPスクリプトは大文字バージョンを使用しています。しかし、今、私はたくさんのPHP小文字バージョン(つまりZend Framework)で書かれています。
大文字バージョンを使用する理由はありますか、それとも小文字を使用してもまったく問題ありませんか?
編集:これはNULL
とnull
にも当てはまることを忘れていました。
official PHP manual のコメント:
ブールリテラルを指定するには、キーワードTRUEまたはFALSEを使用します。両方とも大文字と小文字を区別しません。
そう、true === TRUE
とfalse === FALSE
。
ただし、個人的には、読みやすさの理由から、TRUE
よりもtrue
およびFALSE
よりもfalse
の方が好きです。 OR
または||
よりもor
を使用すること、およびAND
または&&
よりもand
を使用することを好むのと同じ理由です。
PSR-2 標準では、true
、false
、およびnull
を小文字にする必要があります。
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 )
小文字を使用します。
[〜#〜] psr [〜#〜] バンドワゴンに乗るまで、すべてのキャップですべてのconstのようなCスタイルのTRUE/FALSEブール値を使用していました。
PSR-2のセクション2.5:
PHP定数true、false、およびnullは小文字でなければなりません。
したがって、基本的に、オープンソーススタイルの詳細でNiceをプレイする場合は、ブール値を小文字にする必要があります。
true
はTRUE
とまったく同じです。 false
とnull
についても同様です。私はそれがどんな点でも重要だとは聞いていません。
混乱させる唯一の方法は、それらの値を引用することです、例えば:
$foo = false; // FALSE
$bar = "false"; // TRUE
$foo2 = true; // TRUE
$bar2 = "true"; // TRUE
$foo3 = null; // NULL
$bar3 = "null"; // TRUE
大文字または小文字の使用を制限または奨励しているのは、会社または独自のコーディングガイドラインだけかもしれません。それ以外は、いずれかを自由に使用でき、問題が発生することはありません。
falseと[〜#〜] false [〜#〜]の違いをチェックする簡単なコードを書きました:各反復は次のようなことをしていました:
for ($i = 0; $i < self::ITERATIONS; ++$i) {
(0 == FALSE) ;
}
結果は次のとおりです。
Iterations: 100000000
using 'FALSE': 25.427761077881 sec
using 'false': 25.01614689827 sec
そのため、ブール値の場合、パフォーマンスがわずかに影響を受けることがわかります。小文字の方が高速です。しかし、確かに表示されません。
個人的には常に小文字の形式を使用しましたが、コードをきれいにする以外の特別な理由がない限り、大文字を使用する唯一の場所はキャメルケースのクラス名と変数名です。
ただし、頭に浮かぶ大文字を使用する利点の1つは、大文字を使用してコード内で簡単に見つけられることです。
私は同じことを自問しながらこの古い質問に出会いました。 define( 'TRUE'、false); define( 'FALSE'、true);の良い点ただし、php5には適用されません。これらの行をphp5コードで記述することは、コメントを記述することに似ています。
これは、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回勝ちました。私の環境では大文字の方が高速です。