boolval()
Функция PHP boolval() преобразует любое значение в boolean. Узнайте синтаксис, правила истинности и типичные ловушки.
Введение
Функция boolval() в PHP — это функция приведения типов, которая преобразует любое значение в его булев эквивалент — либо true, либо false. Появившись в PHP 5.5, она следует тем же правилам, которые PHP применяет везде, где значение интерпретируется как условие (например, внутри оператора if), и потому является ясным, явным способом ответить на вопрос: «является ли это значение истинным?».
boolval() делает ровно то же самое, что приведение (bool). Причина её существования в том, что, в отличие от приведения, функцию можно передавать в виде обратного вызова — например в array_map() — а языковую конструкцию вроде (bool) передать таким образом нельзя.
На этой странице рассматриваются синтаксис, правила преобразования для каждого типа, отличия boolval() от приведения (bool) и типичные подводные камни (в частности, строка "0").
Базовый синтаксис
Базовый синтаксис функции boolval() выглядит следующим образом:
Базовый синтаксис функции PHP boolval()
boolval(mixed $value): boolПараметр $value — это значение, которое нужно преобразовать. Функция всегда возвращает boolean: true для любого истинного значения и false для любого ложного. Она не имеет побочных эффектов и никогда не генерирует исключений.
Какие значения являются ложными?
PHP считает ложными лишь фиксированный набор значений. Всё остальное — true. Запомнить этот короткий список — ключ к правильному использованию boolval():
- само
false - целое число
0и число с плавающей точкой0.0(и-0.0) - пустая строка
""и строка"0" - пустой array
[] null- неустановленная / неопределённая переменная
Строка "0" — классическая ловушка: она непустая, однако PHP считает её ложной. Обратите внимание, что "0.0", " " (пробел) и "false" — всё это истинные строки.
Пример использования
Ниже приведён пример использования функции boolval() в PHP:
Пример использования PHP boolval()
Здесь boolval() преобразует $var1 (ненулевое целое число) в true, а $var2 (ноль) в false. Мы оборачиваем результат в var_export(), чтобы boolean выводился как текст true / false — обычный echo выведет 1 для true и ничего для false, что затрудняет чтение результатов.
boolval() против приведения (bool)
При преобразовании отдельного значения boolval($x) и (bool) $x взаимозаменяемы и дают одинаковый результат:
<?php
$value = "0";
var_export(boolval($value)); // false
echo "\n";
var_export((bool) $value); // falseКогда же следует выбирать boolval() вместо (bool)? Всякий раз, когда нужно передать преобразование как callable. Приведение — это языковая конструкция, а не функция, поэтому её нельзя передать в функции высшего порядка вроде array_map() или array_filter(). boolval — можно:
Фильтрация array до истинных значений
Каждый элемент преобразуется в boolean. 1, "hello" и [1] становятся true; остальные — включая коварный "0" — становятся false.
Типичная ловушка: строка "0"
Поскольку boolval() воспроизводит правила истинности PHP, строка "0" даёт false. Это сбивает с толку код, валидирующий пользовательский ввод, так как поля форм всегда приходят в виде строк:
<?php
$input = "0"; // e.g. $_POST['quantity']
if (boolval($input)) {
echo "treated as true\n";
} else {
echo "treated as false\n"; // this branch runs
}Если вам нужно именно «является ли эта строка непустой?», а не «является ли она истинной?», используйте явное сравнение с "" посредством строгой проверки ($input !== ""), а не boolval().
Рекомендации по использованию boolval()
Чтобы эффективно использовать функцию boolval() в PHP, важно придерживаться ряда рекомендаций:
Используйте строгие сравнения
При работе с функцией boolval() важно применять строгие сравнения (===) вместо нестрогих (==). Нестрогие сравнения могут приводить к непредсказуемому поведению.
Используйте подходящие типы переменных
При использовании функции boolval() важно убедиться, что преобразуемая переменная имеет подходящий тип. Подробнее о том, как различные типы данных преобразуются в boolean, см. в руководстве PHP по приведению типов.
Справочник по преобразованию типов
Понимание того, как различные типы PHP преобразуются в boolean, помогает избежать неожиданных результатов:
| Тип | Преобразуется в true | Преобразуется в false |
|---|---|---|
string | Непустая строка | Пустая строка "" |
int / float | Ненулевое значение | 0 или 0.0 |
array | Непустой array | Пустой array [] |
null | Никогда | Всегда |
Связанные функции
boolval() входит в семейство вспомогательных функций PHP для преобразования типов. Выбирайте ту, которая соответствует нужному типу:
intval()— преобразование значения в целое число.floatval()— преобразование значения в число с плавающей точкой.strval()— преобразование значения в string.settype()— изменение типа переменной на месте.gettype()/is_bool()— определение текущего типа переменной.
Для более широкого обзора того, как значения перемещаются между типами, см. раздел типы данных PHP.
Заключение
boolval() преобразует любое значение в boolean по стандартным правилам истинности PHP, возвращая false лишь для фиксированного короткого списка ложных значений (false, 0, 0.0, "", "0", [], null и неустановленных переменных) и true для всего остального. По поведению она полностью совпадает с приведением (bool), но имеет дополнительное преимущество: её можно передавать как обратный вызов в такие функции, как array_map(). Помните о подводном камне с "0" при валидации строкового ввода и предпочитайте строгие сравнения там, где нужен точный контроль.