Побитовые операторы
Если вы не знакомы с записью информации в битовой форме, ничего страшного - в этом разделе приводится общая информация по данной теме. В противном случае можете с чистой совестью переходить к следующему разделу.
Бит является минимальной единицей представления информации. В бите может храниться только одно двоичное число или, другими словами, 1 или 0. Компьютеры работают с двоичными представлениями данных. Двоичное представление числа является значением этого числа в двоичном исчислении. Например, если вы задаете компьютеру операцию сложения 3 и 5, он преобразует эти числа в их двоичное представление 0011 и 0101 соответственно. Затем выполняется указанное действие (в данном случае это сложение) и возвращается результат, равный 1000. Только после этого двоичный результат преобразуется обратно в десятичный вид, и мы получаем результат - 8.
Побитовые операторы подобны логическим операторам, за исключением того, что они обрабатывают двоичное представление своих аргументов. В случае, если оба аргумента являются строками, операция выполняется между параллельными смещениями символов, а результат хранится с тем же смещением результирующей строки. Во всех других случаях аргументы преобразуются в целочисленное представление, и только после этого выполняется сама операция.
При использовании логических операторов операция 1 and 10 дает TRUE. При выполнении операции "логического И" 1 and 10 возвращает значение TRUE. Однако рассмотрим эти числа как двоичные. Что происходит в этом случае? Десятичная единица в двоичном представлении выглядит как 0001, а 10 - это 1010. Операция "побитовое И" над 1 и 10 возвращает 0. Так происходит из-за того, что операция "побитовое И" сравнивает каждый бит. Побитовые операторы языка PHP приводятся в табл. 2.10.
Переменные, операторы и выражения
Пример выполнения побитовой операции показан на рис. 2.1. На нем отражена операция (12 & 10) == 8.
Побитовые операции эффективно применяются в языке C, который является общепризнанным предшественником PHP, но они редко используются в PHP-сце-нариях. О том, насколько незначительно использование таких операторов, рассказывается в последующих главах.
Переменные, операторы и выражения
Операторы определения типа данных (кастинга)
Автоматическое преобразование значений в зависимости от контекста позволяет игнорировать точные типы. Однако в определенных ситуациях может потребоваться задать явным образом нужный тип значений. Операция преобразования значения определенного типа в эквивалентное ему значение другого типа называется кастингом. В табл. 2.11 приведены операторы преобразования PHP.
PHP имеет несколько операторов преобразования. Форма записи операторов преобразования является простым обозначением типа, к которому вы планируете привязать ту или иную переменную, указанную в скобках. Выражение, которое вы намерены привязать, указывается справа от оператора преобразования.
Переменные, операторы и выражения
 Заметим, что операция преобразования не изменяет самого значения переменной, она только задает тип выражения. Если необходимо изменить тип значения, хранящегося в данной переменной, можно воспользоваться функцией settype, которая подробно описывается в главе 11, "Данные". 
Такое явное преобразование типа выражений может потребоваться в случае, когда PHP осуществляет передачу данных в среды, менее лояльные к типам. Например, PHP не обращает внимание на лишние символы в числах, когда строки преобразуются в числа, а такой язык, как SQL (этот язык используется в большинстве реляционных баз данных), - нет.
Другие операторы
Существуют операторы, которые нельзя отнести ни к одной из предыдущих категорий, - это оператор конкатенации, маркер переменной и оператор ссылки
(табл. 2.12).
Переменные, операторы и выражения
Оператор конкатенации аналогичен оператору сложения, но он складывает не числовые значения, а строки. Нестроковые операнды автоматически преобразуются в соответствии с правилами преобразования. Этот очень полезный оператор. При работе с оператором print довольно удобно объединять несколько строк. Оператор конкатенации, например, удобно использовать при построении запросов к базе данных (листинг 2.13).