Типы переменных
Тип переменной характеризуется видом хранящихся в ней данных. РНР предлагает целый набор типов данных. Различные данные могут храниться в переменных различных типов.
Типы данных РНР
РНР поддерживает следующие базовые типы данных.
■ Integer (целый) — используется для представления целых чисел.
■ Float, также называемый double (двойной точности) — используется для представления действительных чисел.
■ String (строковый) — используется для представления строк символов.
■ Boolean (булевский) — используется для хранения значений true (истина) и false (ложь).
■ Array (массив) — используется для хранения нескольких элементов данных.
■ Object (объект) — используется для хранения экземпляров классов.
Доступны также и два специальных типа — NULL и resource (ресурс). Переменные, которым не присвоены конкретные значения, которые не определены или принимают значение NULL, относятся к типу NULL. Некоторые встроенные функции (такие как функции работы с базами данных) возвращают переменные ресурсного типа. Такие переменные представляют внешние ресурсы (например, соединения с базами данных). Можно с достаточной уверенностью утверждать, что напрямую манипулировать переменными ресурсного типа вам не придется, тем не менее, они часто возвращаются одними функциями и передаются в качестве параметров в другие функции.
Степень типизации
Язык РНР является весьма слабо типизированным, или динамически типизированным. В большинстве языков программирования переменные могут хранить данные только одного типа, и этот тип должен быть объявлен прежде, чем переменную можно будет использовать, как это имеет место, скажем, в языке С. В РНР тип переменной определяется типом присвоенного ей значения.
Например, при создании переменных $totalqty и $totalamount их начальные типы были определены следующим образом:
$totalqty = 0;
$totalamount =0.00;
Поскольку переменной $totalqty было присвоено целочисленное значение 0, эта переменная теперь имеет тип integer. Аналогично, переменная $totalamount имеет тип float.
Также в сценарий вполне можно поместить такую строку:
$totalamount = 'Добро пожаловать';
Теперь переменная $totalamount имеет тип string. РНР в любой момент времени изменяет тип переменной в соответствии с хранящимися в ней данными.
Подобная возможность явного изменения типов на лету может оказаться исключительно полезной. Помните, что РНР “автоматически” распознает тип данных, помещаемых в переменные. РНР возвращает данные именно того типа, который был назначен переменной.
Приведение типов
С помощью механизма приведения типов можно переводить переменную или конкретное значение в другой тип. Приведение выполняется так же, как в языке С. Для этого достаточно просто перед переменной, тип которой вы хотите преобразовать, поместить в круглых скобках временный тип.
Например, мы можем объявить две использованные выше переменные, применив при этом механизм приведения типов:
$totalqty = 0;
$totalamount = (float)$totalqty;
Вторая строка означает: "Взять значение, хранящееся в переменой $totalqty, интерпретировать его как значение типа float и сохранить в переменной $totalamount." Переменная $totalamount получит тип float. Приведение типов не меняет тип исходной переменной, поэтому тип переменной $totalqty остается integer.
Переменные переменных
РНР предоставляет в распоряжение разработчиков еще один тип переменных — так называемые переменные переменных. Переменные переменных позволяют динамически менять имена переменных.
Как вы сами можете убедиться, РНР допускает очень большую свободу в этой области — все языки разрешают изменять значение переменной, но лишь некоторые позволяют изменять тип переменной и уж совсем немногие — имя переменной.
В основу этой возможности положена идея использования значения одной переменной в качестве имени другой. Например, можно было бы определить так:
$varname = "tireqty";
Затем вместо $tireqty можно использовать $$varname, например:
$$varname = 5;
Это в точности эквивалентно следующему:
$tireqty = 5;
Данная особенность может показаться несколько запутанной, однако позже мы еще вернемся к практическому использованию этой возможности. Вместо того чтобы перечислять все переменные и использовать каждую переменную формы по отдельности, можно зарезервировать еще одну переменную и организовать автоматическую обработку всех переменных в цикле. Пример, иллюстрирующий такой подход, приведен в разделе, посвященном циклам for, ниже.
|