Is bool: примеры (PHP)

Функция is_bool в PHP: примеры использования и особенности
Раздел: Работа с переменными
is_bool(mixed $value): bool

Основные сведения о функции is_bool

Функция is_bool() в PHP используется для проверки, является ли значение переменной логическим (булевым) типом. Она возвращает true, если проверяемое значение имеет тип bool (или исторически boolean), и false в противном случае.

Назначение и сценарии использования

Основное применение функции — валидация входных данных, особенно при работе с пользовательским вводом, результатами функций, возвращающих логические значения, или для обеспечения корректности типов в условных конструкциях и строгой типизации.

Аргументы функции

Функция принимает один обязательный параметр:

  • $value (mixed) — проверяемое значение. Может быть любого типа.

Возвращаемое значение — bool (true или false).

Простые примеры использования

Пример проверки переменных разных типов:

$var1 = true;
$var2 = false;
$var3 = 1;
$var4 = 'true';
$var5 = null;

var_dump(is_bool($var1));
var_dump(is_bool($var2));
var_dump(is_bool($var3));
var_dump(is_bool($var4));
var_dump(is_bool($var5));
bool(true)
bool(true)
bool(false)
bool(false)
bool(false)

Пример использования в условном операторе:

$flag = false;

if (is_bool($flag)) {
    echo 'Переменная $flag является булевым значением.';
} else {
    echo 'Переменная $flag не является булевым значением.';
}
Переменная $flag является булевым значением.
Похожие функции в PHP

Для проверки типов в PHP существует семейство функций is_*.

  • is_scalar() — проверяет, является ли переменная скалярным значением (int, float, string, bool). Отличается более широким охватом типов.
  • gettype() — возвращает строку с названием типа переменной. Позволяет получить более детальную информацию, но для простой проверки на bool менее эффективна.
  • === (оператор строгого сравнения) — может использоваться для сравнения с true или false, но не определяет тип, а проверяет значение и тип одновременно. Например, $var === true вернет true только если $var равно true и имеет тип bool.

Функцию is_bool() предпочтительно использовать, когда необходимо строго убедиться, что значение относится именно к логическому типу, а не к любому другому, который может быть приведен к нему.

Типичные ошибки

Основная ошибка — путаница с приведением типов. Функция is_bool() проверяет именно тип, а не значение.

// Ошибка: ожидание, что строки 'true'/'false' или числа 1/0 будут определены как bool.
$values = ['true', 'false', 1, 0, '1', '0'];
foreach ($values as $value) {
    var_dump($value, is_bool($value));
    echo '---\n';
}
string(4) "true"
bool(false)
---
string(5) "false"
bool(false)
---
int(1)
bool(false)
---
int(0)
bool(false)
---
string(1) "1"
bool(false)
---
string(1) "0"
bool(false)
---

Еще одна ошибка — попытка использовать is_bool() для проверки результата функций, которые могут возвращать значения разных типов, без учета конкретного сценария.

// filter_var с FILTER_VALIDATE_BOOLEAN возвращает mixed: bool или false при неудаче.
$result = filter_var('yes', FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE);
// $result теперь имеет значение true (bool), но может быть false (bool) или null.
var_dump(is_bool($result)); // Вернет true, если 'yes' преобразовано в bool.
bool(true)
Изменения в последних версиях PHP

Функция is_bool() остается стабильной и неизменной на протяжении многих версий PHP, включая PHP 8.x. Ее поведение и сигнатура не претерпели изменений. Однако, в PHP 8 усилилась система типов, что делает проверку типов еще более важной, особенно в контексте строгой типизации и объявленных типах (type hints) для аргументов и возвращаемых значений функций.

Расширенные примеры применения
Проверка значений в массиве
Пример php
$data = [true, 'false', false, 0, null, [true]];
$results = array_map('is_bool', $data);
print_r($results);
Array
(
    [0] => 1
    [1] => 
    [2] => 1
    [3] => 
    [4] => 
    [5] => 
)
Использование в пользовательской функции валидации
Пример php
function validateBooleanField($value): bool {
    if (is_bool($value)) {
        return $value;
    }
    if (is_string($value)) {
        $filtered = filter_var($value, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE);
        return $filtered ?? false; // Если не преобразовалось, вернем false.
    }
    return (bool) $value; // Приведение для других типов.
}

echo validateBooleanField('yes') ? 'true' : 'false';
echo '\n';
echo validateBooleanField('invalid') ? 'true' : 'false';
true
false
Работа с результатами функций, возвращающих смешанные типы
Пример php
// json_decode() может вернуть разные типы.
$jsonString = '{"is_active": true, "count": 5}';
$data = json_decode($jsonString);

var_dump(is_bool($data->is_active));
var_dump(is_bool($data->count));
bool(true)
bool(false)
Проверка значений, возвращаемых функциями обработки ошибок
Пример php
// set_error_handler может возвращать bool.
$oldHandler = set_error_handler(function() { return true; });
var_dump(is_bool($oldHandler)); // Может быть bool (false) или callable.
restore_error_handler();
bool(false)
Аналоги в других языках программирования

Is bool в Python

В Python для проверки типа используется функция isinstance() или сравнение с классом bool через type().

value = True
print(isinstance(value, bool))
print(type(value) is bool)
True
True

Is bool в Javascript

В JavaScript используется оператор typeof, который для булевых значений возвращает строку 'boolean'.

let value = false;
console.log(typeof value === 'boolean');
true

Is bool в MySQL

В SQL нет прямой функции проверки типа. Типы данных контролируются схемой таблицы. Однако в логических контекстах (например, в WHERE) значения интерпретируются как истина/ложь неявно. Тип BOOLEAN является синонимом для TINYINT(1).

SELECT TRUE IS TRUE, 0 IS FALSE;
1, 1

Отличие от PHP: PHP имеет встроенную функцию проверки типа, тогда как в JavaScript и Python это реализовано через операторы или общие функции проверки типов.

PHP is_bool function comments

En
Is bool Finds out whether a variable is a boolean