Булевы значения строк PHP
Я пытаюсь понять истинность строк в PHP. Я подумал, что это может быть похож на другой язык сценариев, как Javascript или Python.
> var_dump((bool)"");
bool(false);
> var_dump((bool)"hello");
bool(true);
Хорошо, имеет смысл.
Потом я попробовал
> var_dump((bool)"0");
bool(false);
В самом деле? Это странно. Я предполагаю, что PHP пытается сначала разобрать строку как число. Так что это также должно быть false
> var_dump((bool)"00");
bool(true);
А?!? Я действительно смущен и хотел бы знать, что делает строку правдивой или нет.
Я пока не смог ничего найти.
2 ответа
См. Документы для преобразования в логическое значение:
При преобразовании в логическое значение следующие значения считаются ЛОЖНЫМИ:
the boolean FALSE itself the integer 0 (zero) the float 0.0 (zero) the empty string, and the string "0" an array with zero elements an object with zero member variables (PHP 4 only) the special type NULL (including unset variables) SimpleXML objects created from empty tags
Любое другое значение считается ИСТИННЫМ (включая любой ресурс).
Из логической документации PHP
При преобразовании в логическое значение следующие значения считаются ЛОЖНЫМИ:
само логическое ЛОЖЬ
целое число 0 (ноль)
Поплавок 0.0 (ноль)
пустая строка и строка "0"
массив с нулевыми элементами
объект с нулевыми переменными-членами (только PHP 4)
специальный тип NULL (включая неустановленные переменные)
SimpleXML объекты, созданные из пустых тегов
Так что да, ваш пример имеет смысл, 0
является логическим ложным в то время как 00
это строка и это правда