为什么PHP var_export()打印NULL大写,但是true和false小写?

时间:2015-12-26 01:13:49

标签: php

请参阅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

1 个答案:

答案 0 :(得分:1)

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

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

IEEE Std 1003.1参考文献: