строка — PHP & amp; Поведение Perl при тестировании «0», «-0», «0,0», «00»,

Я столкнулся с этим интересным поведением, когда 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"?

2

Решение

Вы используете троичный оператор, который проверяет truthiness выражения перед ?, truthiness значений описывается в Булевы раздел:

При преобразовании в логическое значение следующие значения считаются ЛОЖНЫМИ:

само логическое ЛОЖЬ
целое число 0 (ноль)
Поплавок 0.0 (ноль)
пустая строка и строка «0»
массив с нулевыми элементами
объект с нулевыми переменными-членами (только PHP 4)
специальный тип NULL (включая неустановленные переменные)
SimpleXML объекты, созданные из пустых тегов

Любое другое значение считается ИСТИННЫМ (включая любой ресурс).

Так что да, строка "0" (а также пустая строка "") рассматривается как особый случай.


в Perl Троичный оператор а также Правда и ложь вести себя как PHP (на самом деле, наоборот).

3

Другие решения

Это просто из-за типизации в PHP. У вас есть пустая строка только в двух случаях: «» и «0»

http://php.net/manual/en/language.types.boolean.php

2