Я столкнулся с этим интересным поведением, когда PHP / Perl проверяет значение
print "0" ? "Yes" : "No"; // => No
print "00" ? "Yes" : "No"; // => Yes
print "0.0" ? "Yes" : "No"; // => Yes
print "-0" ? "Yes" : "No"; // => Yes
print "+0" ? "Yes" : "No"; // => Yes
print "0 " ? "Yes" : "No"; // => Yes
Таким образом, кажется, что числовое значение в строке не имеет значения, но есть особый случай для строки "0"
,
Больше всего меня удивило то, что Perl ведет себя одинаково.
Почему есть конкретный случай, когда строка точно "0"
?
Вы используете троичный оператор, который проверяет truthiness выражения перед ?
, truthiness значений описывается в Булевы раздел:
При преобразовании в логическое значение следующие значения считаются ЛОЖНЫМИ:
само логическое ЛОЖЬ
целое число 0 (ноль)
Поплавок 0.0 (ноль)
пустая строка и строка «0»
массив с нулевыми элементами
объект с нулевыми переменными-членами (только PHP 4)
специальный тип NULL (включая неустановленные переменные)
SimpleXML объекты, созданные из пустых теговЛюбое другое значение считается ИСТИННЫМ (включая любой ресурс).
Так что да, строка "0"
(а также пустая строка ""
) рассматривается как особый случай.
в Perl Троичный оператор а также Правда и ложь вести себя как PHP (на самом деле, наоборот).
Это просто из-за типизации в PHP. У вас есть пустая строка только в двух случаях: «» и «0»