Это странно
var_dump(filter_var(true, FILTER_VALIDATE_BOOLEAN));
var_dump(filter_var(false, FILTER_VALIDATE_BOOLEAN));
bool(true)
bool(false)
Что мне здесь не хватает? Конечно, они оба должны быть правдой? Если нет, то как я могу проверить ложное логическое значение?
Изменить: чтобы уточнить.
Мне нужно проверить ложное логическое значение. Чтобы убедиться, что это не строка, int, float или что-то еще.
например
$var = false; //true
$var = true; //true
$var = 'foo'; //false
$var = 1; //false
Возможно, я неправильно задал свой вопрос или слишком много развил его, и мне следует задать другой вопрос.
Решение, за которое я пошел, было:
$result = filter_var($bool, FILTER_VALIDATE_BOOLEAN) && ($bool===true||$bool===false);
Из руководства: —
Если задано FILTER_NULL_ON_FAILURE, FALSE возвращается только для «0», «false», «off», «no» и «», а NULL возвращается для всех не булевых значений.
Установите это, и если null
возвращается, у вас нет значения bool (или boolish).
Например:-
var_dump(filter_var(true, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE));
var_dump(filter_var(false, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE));
var_dump(filter_var(2, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE));
Тем не менее, это может быть is_bool()
здесь уместнее.
Других решений пока нет …