См https://3v4l.org/6OelkПочему PHP var_export() печатает NULL в верхнем регистре, но true и false в нижнем регистре?
var_export(array(NULL, TRUE, FALSE));
Результат:
array (
0 => NULL,
1 => true,
2 => false,
)
NULL заглавная, но истина и ложь в нижнем регистре.
Я полагаю, что у этого есть историческая причина, но я нигде не обнаружил его документально.
Следующий эксперимент также весьма интересен, и предполагает, что внутренне «каноническое» правописание нуля, истинного и ложного в нижнем регистре, вопреки тому, что 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» не могут быть переопределены.
О, только для полноты: define ('NULL', ..) и define ('FALSE', ..) на самом деле НЕ игнорируются, если внутри пространства имен в PHP 5.x. См. https://3v4l.org/JusvB. Или, если вы действительно хотите, вы можете даже отменить «нулевой» и «ложь» в пространстве имен: https://3v4l.org/i796C
Связанные: Uppercase Booleans vs. Lowercase in PHP см этот ответ: https://stackoverflow.com/a/3807178/246724
Ok, я подозреваю, что, может быть, ответ действительно скучный. Человек, который написал var_export(), мало думал об этом, и просто подумал, что NULL выглядит лучше в верхнем регистре, даже если это противоречиво. И теперь нам нужно жить с ним, потому что в противном случае существующие модульные тесты с hardcoded var_export() будут неудачными. Может быть, у кого-то есть лучший ответ, но я боюсь, что может быть не так много. – donquixote
Если кто-то может подтвердить это объяснение/мою теорию, в идеале с некоторыми доказательствами/ссылками, то это будет правильным и полезным ответом на этот вопрос.Это может быть скучно, но это будет означать, что люди могут перестать смотреть. – donquixote
Это скучный ответ: https://github.com/php/php-src/blob/master/ext/standard/var.c#L436 (изменить: обновленная ссылка, как-то вставлена неправильно) – Dukecz