【问题标题】:Why does PHP var_export() print NULL uppercase, but true and false lowercase?为什么 PHP var_export() 打印 NULL 大写,而 true 和 false 小写?
【发布时间】:2015-12-26 01:13:48
【问题描述】:

https://3v4l.org/6Oelk

var_export(array(NULL, TRUE, FALSE));

结果:

array (
  0 => NULL,
  1 => true,
  2 => false,
)

NULL 为大写,true 和 false 为小写。

我想这是有历史原因的,但我没有发现它在任何地方都有记录。


下面的实验也很有趣,它表明在内部,null、true 和 false 的“规范”拼写是小写的,这与 var_export() 的作用相反:https://3v4l.org/ggM4E

define('false', '- false -');
define('FALSE', '- FALSE -');
define('null', '- null -');
define('NULL', '- NULL -');
var_export(array(TRUE, true, FALSE, false, NULL, null));

这表明:

  • define('NULL', ..) 和 define('FALSE', ..) 是允许的,但在最近的 PHP 版本中无效。
  • define('null', ..) 和define('false', ..) 给出通知,但在最近的PHP版本中也没有效果。
  • 在旧的 PHP 版本 (4.x) 中,'NULL' 和 'FALSE' 可以重新定义并且它确实有效。但 'null' 和 'false' 不能重新定义。

哦,只是为了完整性:在 PHP 5.x 中,如果在命名空间内,define('NULL', ..) 和 define('FALSE', ..) 实际上不会被忽略。见https://3v4l.org/JusvB。或者,如果您真的想要,您甚至可以在命名空间中覆盖“null”和“false”:https://3v4l.org/i796C


相关:Uppercase Booleans vs. Lowercase in PHP,看这个答案:https://stackoverflow.com/a/3807178/246724

【问题讨论】:

  • 好吧,我怀疑这个答案可能真的很无聊。写 var_export() 的人也没多想,只是觉得 NULL 大写更好看,即使不一致。现在我们必须忍受它,否则,使用硬编码 var_export() 比较的现有单元测试将失败。也许有人有更好的答案,但恐怕没有更多的答案。
  • 如果有人能证实我的这个解释/理论,最好有一些证据/参考资料,那么这将是这个问题的有效和有用的答案。这可能很无聊,但这意味着人们可以停止寻找。
  • 这很无聊的答案:github.com/php/php-src/blob/master/ext/standard/var.c#L436(编辑:更新的链接,不知何故粘贴了错误的)
  • 谢谢@Dukecz! git blame 把我发到这里:github.com/php/php-src/commit/… 想知道这是不是在这里介绍的,或者追溯到更远的地方。 (不知道var_export()是从什么时候开始存在的)
  • @donquixote 差不多了,这里没有什么特别的原因。如果您认为这段代码是由 C 程序员编写的,其中 (C99, stddef, stdbool) NULL 是大写字母,true/false 是小写字母,那么特定的大小写选择可能更有意义。

标签: php


【解决方案1】:

正如@NikiC 在 OP cmets 中指出的那样,没有具体的理由。

最合乎逻辑的解释是 考虑到 PHP 是用 C 语言编写的,而历史标准将 NULL 定义为大写,truefalse 定义为小写,原因在于标准在 PHP 中会效仿。

IEEE Std 1003.1 参考:

【讨论】:

    猜你喜欢
    • 2023-03-31
    • 2020-09-27
    • 1970-01-01
    • 2015-02-22
    • 2013-02-17
    • 2017-03-17
    • 2015-07-20
    • 1970-01-01
    相关资源
    最近更新 更多