Это простейший тип. Он выражает истинность значения - это может быть либо TRUE, либо FALSE. Булев тип был введен в PHP4.
Чтобы определить булев тип, используйте ключевое слово TRUE или FALSE. Оба регистро-независимы.
Code
<?php $x = True; // присвоить $x значение TRUE ?>
Обычно используется некий оператор, который возвращает логическое выражение, а затем предает его управляющей конструкции.
Code
<?php // == это оператор, который проверяет // эквивалентность и возвращает булево значение if ($action == "показать_версию") { echo "Версия 1.23"; }
// это не обязательно... if ($show_separators == TRUE) { echo "<hr>\n"; }
// ...потому что вы можете просто написать if ($show_separators) { echo "<hr>\n"; } ?>
Преобразование в тип Boolean
Для преобразования значения в булев тип используйте приведение типа (bool) или (boolean). Однако в большинстве случаев вам нет необходимости использовать приведение типа, поскольку значение будет автоматически преобразовано, если оператор, функция или управляющая конструкция требует булев аргумент.
При преобразовании в логический тип, следующие значения рассматриваются как FALSE:
*
Сам булев FALSE *
целое 0 (ноль) *
число с плавающей точкой 0.0 (ноль) *
пустая строка и строка "0" *
массив с нулевыми элементами *
объект с нулевыми переменными-членами *
специальный тип NULL (включая неустановленные переменные)
Все остальные значения рассматриваются как TRUE (включая любой ресурс).
Внимание! -1 считается TRUE, как и любое ненулевое (отрицательное или положительное) число!
Cтроки могут содержать любые, в том числе и бинарные данные. Для работы с такими строками иногда удобно использовать функции pack() и unpack().
pack(string $format [,mixed $args, ...])
Функция pack() упаковывает заданные аргументы в бинарную строку, которая затем и возвращается. Формат параметров, а также их количество, задается при помощи строки $format, которая представляет собой набор однобуквенных спецификаторов форматирования — наподобие тех, которые указываются в sprintf(), но только без знака %. После каждого спецификатора может стоять число, которое отмечает, сколько информации будет обработано данным спецификатором. А именно, для форматов a, A, h и H число задает, какое количество символов будет помещено в бинарную строку из тех, что находятся в очередном параметре-строке при вызове функции (то есть, определяется размер поля для вывода строки). В случае @ оно определяет абсолютную позицию, в которую будут помещены следующие данные. Для всех остальных спецификаторов следующие за ними числа задают количество аргументов, на которые распространяется действие данного формата. Вместо числа можно указать *, в этом случае подразумевается, что спецификатор действует на все оставшиеся данные. Вот полный список спецификаторов формата:
a — строка, свободные места в поле заполняются символом с кодом 0; A — строка, свободные места заполняются пробелами; h — шестнадцатеричная строка, младшие разряды в начале; H — шестнадцатеричная строка, старшие разряды в начале; c — знаковый байт (символ); C — беззнаковый байт; s — знаковое короткое целое (16 битов, порядок байтов определяется архитекту- рой процессора); S — беззнаковое короткое целое; n — беззнаковое целое (16 битов, старшие разряды в конце); v — беззнаковое целое (16 битов, младшие разряды в конце); i — знаковое целое (размер и порядок байтов определяется архитектурой); I— беззнаковое целое; l — знаковое длинное целое (32 бита, порядок байтов определяется архитекту- рой); L — беззнаковое длинное целое; N — беззнаковое длинное целое (32 бита, старшие разряды в конце); V — беззнаковое целое (32 бита, младшие разряды в конце); f — число с плавающей точкой (зависит от архитектуры); d — число с плавающей точкой двойной точности (зависит от архитектуры); x — символ с нулевым кодом; X — возврат назад на 1 байт; @ — заполнение нулевым кодом до заданной абсолютной позиции.
Немало, не правда ли? Вот пример использования этой функции:
После выполнения приведенного кода в строке $bindata будет содержаться 6 байтов в такой последовательности: 0x12, 0x34, 0x78, 0x56, 0x41, 0x42 (в шестнадцатеричной системе счисления).
unpack(string $format, string $data)
Функция unpack() выполняет действия, обратные pack() — распаковывает строку $data, пользуясь информацией о формате $format. Возвращает она ассоциативный массив, содержащий элементы распакованных данных. Строка $format задается немного в другом формате, чем в функции pack(), а именно, после каждого спецификатора (или после завершающего его числа) должно "впритык" следовать имя ключа в ассоциативном массиве. Разделяются параметры при помощи символа /. Пример:
Code
$array=unpack("c2chars/nint", $bindata);
В результирующий массив будут записаны элементы с ключами: chars1, chars2 и int. Как видим, если после спецификатора задано число, то к имени ключа будут добавлены номера 1, 2 и т. д., т. е. в массиве появятся несколько ключей, отличающихся суффиксами. Когда бывают полезны функции pack() и unpack()? Например, вы считали участок GIF-файла, содержащий его размер в пикселах, и хотите преобразовать бинарную 32-битную ячейку памяти в формат, понятный PHP. Или, наоборот, стремитесь работать с файлами с фиксированным размером записи. В этом случае вам и пригодятся рассматриваемые функции. Вообще говоря, функции pack() и unpack() применяются сравнительно редко. Это связано с тем, что в PHP практически все действия, которые могут потребовать работы с бинарными данными (например, анализ файла с рисунком с целью определения его размера), уже реализованы в виде встроенных функций, например, с GIF-картинкой это GetImageSize().