Глава 8. Типы данных в PHP
РНР поддерживает переменные следующих типов:
• integer — целое,
• double — число с дробной частью,
• string — строковая переменная,
• array — массив,
• object — объектная переменная,
• boolean — булев.
тип переменной обычно устанавливается непрограммистом, а определяется самим РНР во время выполнения программы в зависимости от контекста, в котором данная переменная используется.
Если вам нужно указать тип переменной самим, то вы можете использовать для этих целей инструкцию cast либо функцию settype(). Но учтите, что переменная в определенных ситуациях может вести себя по-разному. Все зависит от того, какой тип определен для нее на данный момент. В данной главе мы подробно рассмотрим вопросы:
• имена переменных;
• строки;
• преобразование строк;
• массивы;
• указатель array pointer;
• изменение типа;
• определение типов переменных;
• приведение типа.
8.1. Имена переменных
В все переменные имеют имя, которые начинаются со знака $, например $variable. Если взять для сравнения C/C++ и подобные языки, то людям, привыкшим кэтим языкам, такой принцип именования переменных скорее всего покажется странным. Но на практике такой подход имеет все же определенные преимущества. Рассмотрим их подробнее.
1. При таком способе формирования имен переменных их очень легко отличить от остального кода. Если в других языках иногда может возникать путаница с тем, что при первом взгляде на код не всегда ясно, — где здесь переменные, а где функции, то в РНР этот вопрос даже не встает.
2. Данный принцип позволяет очень просто и элегантно реализовать функциональность, просто недоступную иначе. Например, ссылка на переменную по ее имени, хранящемуся в другой переменной:
$name = 'value';
$value = 5;
echo $$name;
В данном примере PHP выведет результат 5. Такие особенности стали возможны из-за заложенного в РНР принципа: «anything is an expression» (любая вещь является выражением). Исходя из этого, РНР воспринимает выражение $$патеследую-щим образом:
• интерпретатор встречает символ $, а это значит, что следующее выражение является именем переменной;
• интерпретатор встречает еще один символ $ и продолжает поиски имени уже другой переменной, значение которой необходимо для вычисления значения предыдущего выражения;
• интерпретатор получаетимя name, находит переменную с таким именем, берет ее значение ('value') и возвращается назад;
• поскольку на предыдущем шаге мы искали имя переменной, то значение только что вычисленного выражения воспринимается именно как имя переменной. Интерпретатор ищет переменную с таким именем (value) и возвращает ее результат (5).
Как вы сами видите, это очень удобная и гибкая система. Достаточно небольшой тренировки, чтобы вы смогли творить чудеса с ее помощью!
Но самое интересное здесь то, что точно же вы можете оперировать с любыми элементами языка, имеющими имя, т. е., например, вызывать метод класса по его имени, содержащемуся в переменной (см. гл. 15).