143

当我在学习 PHP 时,我在某处读到你应该始终使用大写版本的布尔值TRUEFALSE,因为“正常”的小写版本truefalse, 使用起来并不“安全”。

现在已经很多年了,我编写的每个 PHP 脚本都使用大写版本。不过,现在我对此提出质疑,因为我已经看到大量使用小写版本(即 Zend Framework)编写的 PHP。

是否/曾经有理由使用大写版本,还是使用小写完全可以?

编辑:忘了提到这也适用NULLnull

4

11 回答 11

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

Happy debugging! (PHP < 5.1.3 (2 May 2006), see Demo)

Edit: Uppercase bools are constants and lowercases are values. You are interested in the value, not in the constant, which can easily change.


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

Commits d51599dfcd3282049c7a91809bb83f665af23b69 (and 6f76b17079a709415195a7c27607cd52d039d7c3)

于 2010-09-27T19:35:37.990 回答
95

PHP官方手册说:

要指定布尔文字,请使用关键字 TRUE 或 FALSE。两者都不区分大小写。

所以是的,true === TRUE而且false === FALSE

然而,就我个人而言,出于可读性的原因,我更喜欢TRUE一遍trueFALSE一遍。false这与我偏爱使用ORover oror||和使用ANDover andor的原因相同&&

PSR-2标准要求,truefalse小写null

于 2010-01-06T15:21:05.937 回答
35

使用小写。

  1. 打字更容易。(海事组织)
  2. 它更容易阅读。(海事组织)
  3. JavaScript 布尔值是小写且区分大小写的。
于 2010-06-10T17:00:41.700 回答
11

如果你打算使用 JSON,那么RFC7159说:

文字名称必须是小写的。不允许使用其他文字名称。

PHP 5.6中向后不兼容的更改列表中:

根据 JSON 规范,json_decode() 现在始终拒绝 JSON 文字 true、false 和 null 的非小写变体

根据PSR-2 标准

PHP 关键字必须小写。

PHP 常量 true、false 和 null 必须小写。

于 2015-01-26T15:50:22.943 回答
10

在我加入PSR潮流之前,我曾经使用 C 风格的 TRUE/FALSE 布尔值,就像所有 const 一样,全部大写。

PSR-2 第 2.5 节:

PHP 常量 true、false 和 null 必须小写。

所以基本上,如果你想很好地处理开源风格的细节,布尔值必须是小写的。

于 2015-07-03T01:11:28.670 回答
5

没关系,true完全一样TRUEfalse和 也是如此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

就我个人而言,我一直使用小写形式,但除了让我的代码看起来整洁之外没有什么特别的原因,我唯一使用大写字母的地方是驼峰式的类名和变量名。

不过,我想到的使用大写的一个优点是它们很突出并且很容易在代码中找到。

于 2010-01-06T15:21:34.283 回答
2

我在问自己同样的事情时遇到了这个老问题。define('TRUE', false);define('FALSE', true); 的优点 但不适用于php5。在 php5 代码中编写这些行就像编写注释一样。

于 2012-01-17T05:43:33.713 回答
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 次。所以大写在我的环境中更快。

于 2014-07-13T23:55:44.997 回答
0

我迟到了几年,但想提一些有趣的东西,但还没有出现在线程中。今天我发现True也是有效的,不只是trueor TRUE。所有拼写都是等价的。这是相关的,因为 PHP 的 Open API 生成器使用True. (这让我陷入了一种困惑的心态,并通过搜索找到了这个页面)。

于 2020-09-28T14:28:31.530 回答