Преобразование в булев тип в PHP
Доброе время суток участники образовательной IT площадки GeekSpace. Меня зовут Юрий Сиротенко и сегодня мы поговорим о преобразовании в булев тип
Также вы можете посмотреть видео урок "Переменные" в рамках нашего курса "Введение в PHP" перейдя по этой ссылке
Приведение типов в PHP работает так же, как и в C: имя требуемого типа записывается в круглых скобках перед приводимой переменной, например
$x = (bool) 1;
Стоит обратить внимание на то, что внутри скобок допускаются пробелы и символы табуляции, поэтому следующие примеры равносильны по своему действию
$x = (bool) 1;
$x = ( bool ) 1;
Как было сказано в предыдущих уроках, в PHP булев тип может обозначаться несколькими способами. Первый - это полный, обозначается как “boolean”, а второй сокращенный “bool”. Исходя из этого следующие примеры также равнозначны
$x = (boolean) 0;
$x = (bool) 0;
При преобразовании целочисленного значения “0” в логический тип данных, результатом будет false
$x = (bool) 0; // false
Аналогичное поведение будет при попытке преобразовать вещественное число ноль
$x = (bool) 0.0; // false
Если попытаться преобразовать пустую строку в булев тип, результатом будет ложь
$x = (bool) ‘’; // false
Такое же поведение будет в случае преобразования строки содержащей число 0
$x = (bool) ‘0’; // false
Особый тип “NULL”, про который мы поговорим в рамках других конспектов, при преобразовании в логический тип данных также вернет false
$x = (bool) null; // false
Все объекты над которыми производится попытка приведения к логическому типу данных вернут true
$date = new DateTime();
$res = (bool) $date; // true
Но есть одно исключение из правил. Давайте остановимся и рассмотрим его более подробно
SimpleXML
При попытке преобразовать экземпляр класса “SimpleXMLElement” у которого содержимое созданного xml элемента не имеет значений (или других элементов вложенных в него) результатом будет false
$element = new SimpleXMLElement(‘<data></data>’);
$res = (bool) $element; // false
В противном случае результат будет истинным
$element = new SimpleXMLElement(‘<data><item></item></data>’);
$res = (bool) $element; // true
$element = new SimpleXMLElement(‘<data>value</data>’);
$res = (bool) $element; // true
Происходит это потому, что SimpleXML имеет собственный обработчик приведения типов, который преобразует объекты из пустых тегов в false