PHP中的大写布尔与小写

Aus*_*yde 126 php language-history

当我学习PHP时,我在某处读到你应该总是使用大写版本的布尔值,TRUE并且FALSE,因为"普通"小写版本,true并且false使用起来并不"安全".

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

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

编辑:忘了提及这适用于NULLnull.

Rad*_*adu 104

define('TRUE', false);
define('FALSE', true);
Run Code Online (Sandbox Code Playgroud)

快乐的调试!(PHP < 5.1.3(2006年5月2日),见演示)

编辑:大写bool是常量,小写是值.你对价值感兴趣,而不是常数,这很容易改变.


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
Run Code Online (Sandbox Code Playgroud)

提交d51599dfcd3282049c7a91809bb83f665af23b69(和6f76b17079a709415195a7c27607cd52d039d7c3)

  • 然后让我详细解释一下:大写bool是常量而小写是值.你对价值感兴趣,而不是常数,这很容易改变.所以,如果你对文本有一点想法而不急于给予惩罚,你可能会理解这一点. (33认同)
  • 至于编辑,该描述有点误导......实际值本身(在解析时被编译成令牌T_NULL`,`T_TRUE`和`T_FALSE`)不区分大小写,所以使用` NULL`实际上不是一个"常量"---**除非**你*使用`define()`使它成为常量.简单地使用"NULL"或"TRUE"并不意味着它是一个常量,好像没有这样的常量,PHP将其解释为文字.更准确的描述是小写版本**不能被重新定义,而任何其他情况变化*都可以*. (22认同)
  • 我理解你现在所做的一点,但你最初制作它的方式是(IMO)神秘而毫无意义.如果你最初只是编辑了答案,我会投票,因为这是一个非常好的观点,实际上. (12认同)
  • -1因为A)这是没有意义的.B)这不回答问题.和C)我已经接受了正确的答案,这并没有提供任何额外的**有用**信息. (6认同)
  • 这是正确的答案.应该得到这个点. (4认同)

Luk*_*man 85

官方PHP手册说:

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

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

然而,就个人而言,出于可读性的原因,我总是喜欢TRUE一遍trueFALSE一遍false.这是对我的使用偏好同样的原因ORor||,以及使用ANDand&&.

PSR-2标准要求true,false并且null为小写.

  • 只是想指出`OR`和`||`是PHP中的不同运算符(因为它们具有不同的优先级),就像`AND`和`&&`一样.(例如,`&&`和`||`的优先级高于赋值运算符,但`OR`和`AND`不是.) (79认同)
  • 我更喜欢用小写字母输入,所以我不必按住shift键. (35认同)
  • 另外,对于今天的IDE,我没有看到使用纯大写布尔值的原因,因为大多数IDE的语法高亮显示器将它们区分开来. (20认同)
  • 我喜欢小写 - 就像在java中一样,但每个都有自己的.但是我希望他们能够单向解决这个问题,让我们一切都转变为其中一个!!!!! 这不是我真正需要的灵活性! (6认同)
  • @Cyril:有很多充分的理由沉迷于讨厌PHP(例如,只看到Johrn上面提到的,我不知道那个),但鉴于它基本上不区分大小写,混合大小写并不奇怪表达方式是一样的.然而,*是无意义的,它将区分大小写和不区分大小写与一般不敏感性混合在一起.(参见例如:http://stackoverflow.com/questions/5643496/are-php-functions-case-sensitive.) (5认同)
  • PHP的另一个耻辱.真=== TrUe === true === truE === TRUE === ......这只是胡说八道...... (4认同)
  • "可读性"不是选择"AND"而非"&&"和"OR"超过"||"的理由.因为它们不是等效的操作数. (3认同)

小智 30

使用小写.

  1. 打字更容易.(IMO)
  2. 它更容易阅读.(IMO)
  3. JavaScript布尔值是小写且区分大小写的.

  • +1; 我只是要添加Javascript参数:因为在编写PHP和JS代码的Web编程中非常常见,完善的Web开发手指肌肉继续常规应用在最后语言环境中使用的相同字母大小写.至少我经常发现自己在从PHP切换后在Javascript中写入TRUE或FALSE.在PHP中使用小写可以很好地修复这个问题. (5认同)

Man*_*ake 9

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

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

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

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

根据PSR-2标准:

PHP关键字必须是小写的.

PHP常量true,false和null必须是小写的.

  • 很抱歉提到JSON,如果我删除所有这些参考文献并且只提到PSR-2会更好吗? (3认同)
  • 我认为对JSON的引用是合适的,因为您经常在PHP中使用javascript/JSON,并且可能正在寻找一致性. (3认同)

Tod*_*odd 9

我曾经做过C风格的TRUE/FALSE布尔,就像所有的竞争对手一样,直到我加入了PSR的潮流.

PSR-2第2.5节:

PHP常量true,false和null必须是小写的.

所以基本上,如果你想玩开源风格的细节,Booleans必须是小写的.


Tat*_*nen 5

没关系,true完全一样TRUE.这同样适用于falsenull.我没有听说过它在任何时候都很重要.

你可以解决问题的唯一方法是引用这些值,例如:

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

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

$foo3 = null;   // NULL
$bar3 = "null"; // TRUE
Run Code Online (Sandbox Code Playgroud)

限制或鼓励您使用大写或小写的内容可能只是您公司或您自己的编码指南.除此之外,您可以自由使用任何一个,它不会导致任何问题.

  • @Noah Goodrich,我在任何时候都没有暗示`false`和`null`会是一样的.我说"同样适用于'false`和`null`",这意味着两者都可以用小写或大写字母表示. (8认同)

Ark*_*hel 5

我编写了简单的代码来检查falseFALSE之间的区别:每次迭代都做了以下事情:

    for ($i = 0; $i < self::ITERATIONS; ++$i) {
       (0 == FALSE) ;
    }
Run Code Online (Sandbox Code Playgroud)

结果如下:

Iterations: 100000000
using 'FALSE': 25.427761077881 sec
using 'false': 25.01614689827 sec
Run Code Online (Sandbox Code Playgroud)

因此我们可以看到布林情况略微触及了性能 - 小写更快.但你当然不会看到.

  • PHP,而不是JS.:) (2认同)