PHP中的大写布尔值与小写字母
当我学习PHP的时候,我读了一些地方,你应该总是使用布尔值的大写版本, TRUE
和FALSE
,因为“正常的”小写版本, true
和false
,不是“安全”的使用。
现在已经很多年了,我写的每个PHP脚本都使用大写的版本。 现在,我正在质疑这个,因为我已经看到大量的用小写字母(即Zend Framework)编写的PHP。
是/是否有使用大写版本的理由,还是完全可以使用小写?
编辑:忘了提及这适用于NULL
和null
。
官方的PHP手册说:
要指定布尔文字,请使用关键字TRUE或FALSE。 两者都不区分大小写。
所以是的, true === TRUE
和false === FALSE
。
但是,就个人而言,由于可读性的原因,我更喜欢TRUE
而true
FALSE
。 这也是我偏好使用OR
或者||
以及使用AND
over and
or &&
。
PSR-2标准要求为true
, false
和null
为小写。
define('TRUE', false); define('FALSE', true);
快乐debugging! (PHP < 5.1.3(2006年5月2日) ,请参阅Demo )
编辑:大写布尔是常量,小写是值。 你对价值感兴趣,而不是常数,这很容易改变。
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 )
使用小写。
- 打字比较容易。 (IMO)
- 阅读起来比较容易。 (IMO)
- JavaScript布尔值是小写字母和大小写敏感的。
如果你打算使用JSON,那么标准RFC7159说:
文字名称必须是小写的。 没有其他字面名称是被允许的。
从PHP 5.6 :
根据JSON规范,json_decode()现在拒绝JSON文本的非小写变体true,false和null。
而根据PSR-2标准 :
PHP关键字必须小写。
PHP常量true,false和null必须小写。
Ps .:由于SO限制,我无法发布链接到RFC7159。
没关系, true
和TRUE
完全一样。 同样的false
和null
。 我从来没有听说过它会在任何时候都重要。
你可以把事情弄糟的唯一方法就是引用这些值,例如:
$foo = false; // FALSE $bar = "false"; // TRUE $foo2 = true; // TRUE $bar2 = "true"; // TRUE $foo3 = null; // NULL $bar3 = "null"; // TRUE
只有限制或鼓励你使用大写或小写的东西可能是你的公司或你自己的编码准则。 除此之外,你可以自由地使用任何一个,它不会导致任何问题。
我写了简单的代码来检查错误和FALSE之间的差异:每个迭代都做了一些事情:
for ($i = 0; $i < self::ITERATIONS; ++$i) { (0 == FALSE) ; }
结果如下:
Iterations: 100000000 using 'FALSE': 25.427761077881 sec using 'false': 25.01614689827 sec
所以我们可以看到布尔expression式对性能的影响很小 – 小写速度更快。 但是当然你不会看到。
我曾经做过C样式的TRUE / FALSE布尔,就像所有的常量一样,直到我join了PSR的潮stream。
PSR-2第2.5节:
PHP常量true,false和null必须小写。
所以基本上,如果你想和开源风格的细节打好,布尔人应该是小写的。
就个人而言,我一直使用小写forms,但除了使代码看起来整洁之外没有特别的原因,唯一使用大写字母的地方是骆驼shell类名称和variables名称。
使用大写字母的一个优点是,它们伸出来,很容易在代码中find。
当我问自己同样的事情时,我遇到了这个老问题。 define('TRUE',false); define('FALSE',true); 不适用于php5。 在php5代码中写这些行就像写评论。
这是我在Windows 7x64bit Apache / 2.4.9 PHP / 5.5.14上的testing
$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次。 所以大写字母在我的环境中速度更快。