143

PHPを学んでいたとき、「通常の」小文字バージョンとは「安全」に使用できなかったためTRUE、常に大文字バージョンのブール値を使用する必要があることをどこかで読みました。FALSEtruefalse

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

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

編集:これがにも適用されることを言及するのを忘れましNULLnull

4

11 に答える 11

111
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

于 2010-09-27T19:35:37.990 に答える
95

PHPの公式マニュアルには次のように書かれています。

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

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

個人的には、しかし、私は読みやすさの理由から何度もTRUE何度も好みます。これは、 overまたはを使用すること、およびoverまたはを使用することを好む理由と同じです。trueFALSEfalseORor||ANDand&&

PSR-2標準ではtrue、が小文字である必要がfalseあります。null

于 2010-01-06T15:21:05.937 に答える
35

小文字を使用します。

  1. 入力する方が簡単です。(IMO)
  2. 読みやすいです。(IMO)
  3. JavaScriptブール値は小文字で、大文字と小文字が区別されます。
于 2010-06-10T17:00:41.700 に答える
11

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

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

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

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

PSR-2規格によると:

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

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

于 2015-01-26T15:50:22.943 に答える
10

私はPSRの時流に乗るまで、すべての定数のようなCスタイルのTRUE/FALSEブール値をすべて大文字で実行していました。

PSR-2のセクション2.5:

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

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

于 2015-07-03T01:11:28.670 に答える
5

関係ありません、trueとまったく同じTRUEです。同じことがとにfalseも当てはまりますnull。それがいつでも問題になるとは聞いたことがありません。

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

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

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

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

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

于 2010-01-06T15:13:11.057 に答える
5

falseFALSEの違いを確認するための簡単なコードを作成しました。各反復は次のようなことを行っていました。

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

結果は次のとおりです。

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

したがって、ブール値の場合はパフォーマンスがわずかに影響を受けることがわかります。小文字の方が高速です。しかし、確かにあなたは見ることはありません。

于 2013-03-12T11:31:19.463 に答える
4

個人的には常に小文字を使用していますが、コードを整理する以外の理由はありません。大文字を使用するのは、キャメルケースのクラス名と変数名だけです。

ただし、大文字を使用する利点の1つは、大文字が突き出ており、コードで簡単に見つけられることです。

于 2010-01-06T15:21:34.283 に答える
2

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

于 2012-01-17T05:43:33.713 に答える
1

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

于 2014-07-13T23:55:44.997 に答える
0

私はパーティーに何年も遅れていますが、まだスレッドにない面白いことを言いたかったのです。今日私が発見したのは、またはTrueだけでなく、有効でもあります。すべてのスペルは同等です。これは、PHP用のOpen APIジェネレーターのために関連しており、を使用します。(それは私を当惑した心の状態とこのページを見つけた検索に導きました)。trueTRUETrue

于 2020-09-28T14:28:31.530 に答える