当我在学习 PHP 时,我在某处读到你应该始终使用大写版本的布尔值TRUE
和FALSE
,因为“正常”的小写版本true
和false
, 使用起来并不“安全”。
现在已经很多年了,我编写的每个 PHP 脚本都使用大写版本。不过,现在我对此提出质疑,因为我已经看到大量使用小写版本(即 Zend Framework)编写的 PHP。
是否/曾经有理由使用大写版本,还是使用小写完全可以?
编辑:忘了提到这也适用NULL
于null
。
当我在学习 PHP 时,我在某处读到你应该始终使用大写版本的布尔值TRUE
和FALSE
,因为“正常”的小写版本true
和false
, 使用起来并不“安全”。
现在已经很多年了,我编写的每个 PHP 脚本都使用大写版本。不过,现在我对此提出质疑,因为我已经看到大量使用小写版本(即 Zend Framework)编写的 PHP。
是否/曾经有理由使用大写版本,还是使用小写完全可以?
编辑:忘了提到这也适用NULL
于null
。
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)
使用小写。
在我加入PSR潮流之前,我曾经使用 C 风格的 TRUE/FALSE 布尔值,就像所有 const 一样,全部大写。
PSR-2 第 2.5 节:
PHP 常量 true、false 和 null 必须小写。
所以基本上,如果你想很好地处理开源风格的细节,布尔值必须是小写的。
没关系,true
完全一样TRUE
。false
和 也是如此null
。我没有听说这在任何时候都会很重要。
你可以把事情搞砸的唯一方法是引用这些值,例如:
$foo = false; // FALSE
$bar = "false"; // TRUE
$foo2 = true; // TRUE
$bar2 = "true"; // TRUE
$foo3 = null; // NULL
$bar3 = "null"; // TRUE
唯一限制或鼓励您使用大写或小写的可能是您公司或您自己的编码指南。除此之外,您可以自由使用其中任何一个,并且不会导致任何问题。
我编写了简单的代码来检查false和FALSE之间的区别:每次迭代都在做一些事情:
for ($i = 0; $i < self::ITERATIONS; ++$i) {
(0 == FALSE) ;
}
结果如下:
Iterations: 100000000
using 'FALSE': 25.427761077881 sec
using 'false': 25.01614689827 sec
所以我们可以看到布尔大小写对性能的影响很小 - 小写更快。但你肯定不会看到。
就我个人而言,我一直使用小写形式,但除了让我的代码看起来整洁之外没有什么特别的原因,我唯一使用大写字母的地方是驼峰式的类名和变量名。
不过,我想到的使用大写的一个优点是它们很突出并且很容易在代码中找到。
我在问自己同样的事情时遇到了这个老问题。define('TRUE', false);define('FALSE', true); 的优点 但不适用于php5。在 php5 代码中编写这些行就像编写注释一样。
这是我在 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 次。所以大写在我的环境中更快。
我迟到了几年,但想提一些有趣的东西,但还没有出现在线程中。今天我发现True
也是有效的,不只是true
or TRUE
。所有拼写都是等价的。这是相关的,因为 PHP 的 Open API 生成器使用True
. (这让我陷入了一种困惑的心态,并通过搜索找到了这个页面)。