当我学习PHP时,我在某处读到你应该总是使用大写版本的布尔值TRUE
和FALSE
,因为“普通”小写版本true
和false
使用起来并不“安全”。
现在已经很多年了,我编写的每个PHP脚本都使用大写版本。但是,我现在质疑,因为我已经看到大量用小写版本编写的PHP(即Zend Framework)。
是/有没有理由使用大写版本,或者使用小写是否完全可以?
编辑:忘记提及这同样适用于NULL
和null
。
答案 0 :(得分:103)
define('TRUE', false);
define('FALSE', true);
快乐的调试! (PHP< 5.1.3 (2 May 2006),请参阅Demo)
编辑:大写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
提交d51599dfcd3282049c7a91809bb83f665af23b69(和6f76b17079a709415195a7c27607cd52d039d7c3)
答案 1 :(得分:79)
要指定布尔文字,请使用 关键字TRUE或FALSE。两者都是 不区分大小写的。
所以是的,true === TRUE
和false === FALSE
。
但是,出于可读性原因,我个人更喜欢TRUE
而不是true
和FALSE
而不是false
。这与我使用OR
优先于or
或||
以及使用AND
优先于and
或&&
的原因相同。
PSR-2标准要求true
,false
和null
为小写。
答案 2 :(得分:28)
使用小写。
答案 3 :(得分:8)
如果您打算使用JSON,那么RFC7159会说:
文字名称必须小写。不允许使用其他文字名称。
从PHP 5.6中的向后不兼容的更改列表:
json_decode()现在根据JSON规范拒绝JSON文字的非小写变体true,false和null
PHP关键字必须是小写的。
PHP常量true,false和null必须是小写的。
答案 4 :(得分:8)
在我加入PSR行列之前,我常常像所有的竞争对手一样做C风格的TRUE / FALSE布尔值。
PSR-2第2.5节:
PHP常量true,false和null必须是小写的。
所以基本上,如果你想玩开源风格的细节,Booleans必须是小写。
答案 5 :(得分:5)
无所谓,true
与TRUE
完全相同。 false
和null
也是如此。我没有听说它在任何时候都很重要。
你可以解决问题的唯一方法是引用这些值,例如:
$foo = false; // FALSE
$bar = "false"; // TRUE
$foo2 = true; // TRUE
$bar2 = "true"; // TRUE
$foo3 = null; // NULL
$bar3 = "null"; // TRUE
只有限制或鼓励您使用大写或小写的内容可能是您公司或您自己的编码指南。除此之外,你可以自由使用任何一个,它不会导致任何问题。
答案 6 :(得分:5)
我编写了简单的代码来检查 false 和 FALSE 之间的差异: 每次迭代都在做一些事情:
for ($i = 0; $i < self::ITERATIONS; ++$i) {
(0 == FALSE) ;
}
结果如下:
Iterations: 100000000
using 'FALSE': 25.427761077881 sec
using 'false': 25.01614689827 sec
因此我们可以看到布林案件的性能略有提升 - 小写更快。但你当然不会看到。
答案 7 :(得分:4)
就我个人而言,我总是使用小写形式,但除了使我的代码看起来整洁之外没有特别的原因,我使用大写字母的唯一地方是骆驼套管类名和变量名。
使用大写字母的一个好处是,它们突出并且很容易在代码中找到。
答案 8 :(得分:2)
我在问自己同样的事情时遇到了这个老问题。 定义好('TRUE',false);定义('FALSE',true); 虽然不适用于php5。在php5代码中编写这些行就像写评论一样。
答案 9 :(得分:0)
这是我在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次。所以在我的环境中大写更快。
答案 10 :(得分:0)
我参加聚会已经晚了几年,但想提一提一些有趣的东西,但是这些东西还没有出现。今天,我发现True
也是有效的,不仅仅是true
或TRUE
。所有拼写均相同。这是相关的,因为PHP的Open API生成器使用True
。 (这使我陷入了迷茫的状态,并发现了此页面。)