PHP 中的大写布尔值与小写值

当我学习 PHP 的时候,我在某个地方读到,你应该总是使用布尔值的大写版本,TRUEFALSE,因为“正常”的小写版本,truefalse,使用起来不“安全”。

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

是否存在使用大写版本的理由,或者使用小写版本是否完全可以?

编辑: 忘了说这也适用于 NULLnull

36491 次浏览

没关系,trueTRUE是完全一样的。falsenull也是如此。我从没听说过这有什么关系。

唯一能把事情搞砸的方法就是引用这些价值观,例如:

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


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


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

限制或鼓励您使用大写或小写的唯一因素可能是您的公司或您自己的编码指南。除此之外,您可以自由地使用其中任何一个,它不会导致任何问题。

正式的 PHP 手册表示:

若要指定布尔值文本,请使用 关键字正确或错误。都是 不区分大小写。

所以 true === TRUEfalse === FALSE

然而,就我个人而言,由于可读性的原因,我更喜欢 TRUE而不是 trueFALSE。同样的原因,我更喜欢使用 OR而不是 or||,也更喜欢使用 AND而不是 and&&

PSR-2标准要求 truefalsenull都是小写的。

就个人而言,我总是使用小写形式,但没有特别的原因,只是为了让我的代码看起来整洁,我使用大写字母的唯一地方是当骆驼大小写类名和变量名。

不过,使用大写字母的一个好处是,它们很显眼,而且很容易在代码中找到。

用小写。

  1. 这样打字更容易
  2. 更容易读懂
  3. JavaScript 布尔值是小写且区分大小写的。
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)

当我问自己同样的问题时,我遇到了这个老问题。 好点与定义(‘ TRUE’,假) ; 定义(‘ FALSE’,真) ; 但是不适用于 php5,在 php5代码中编写这些代码行就像编写注释一样。

我编写了一些简单的代码来检查 假的假的之间的差异: 每个迭代都在做一些事情:

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

结果如下:

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

因此,我们可以看到,布尔型大小写对性能的影响非常小——小写更快。但你肯定看不到。

下面是我在 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次,所以在我的环境中大写更快。

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

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

PHP 5.6中向后不兼容的更改列表中可以看出:

JSON _ decode ()现在可以根据 JSON 规范在任何时候拒绝 JSON 字面值 true、 false 和 null 的非小写变体

根据 PSR-2标准:

PHP 关键字必须小写。

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

我过去常常使用 C 风格的 TRUE/FALSE 布尔值,就像所有常量一样,全部大写,直到我跟上了 PSR的潮流。

第二阶段第2.5节:

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

所以基本上,如果你想在开源风格方面做得更好,布尔值必须是小写的。

我已经迟到好几年了,但是我想提一些有趣的事情,这些事情还没有写进我的帖子里。今天我发现 True也是有效的,不仅仅是 true或者 TRUE。所有的拼写都是等价的。这是相关的,因为 PHP 的 OpenAPI 生成器使用 True。(这让我陷入了一种困惑的心理状态,然后我开始寻找,最终找到了这一页)。