Есть языки строго типизированные, есть не строготипизированные, иначе — с динамической типизацией, к которым и относится php. В строготипизированных языках при создании переменной пишем какого типа она будет. Если будет объявлено число, попытка положить туда что-то другое приведет к ошибке.
В языках с динамической типизацией не задаются типы переменных, что положили в конце, такого типа и переменная. Все эти типы — это внутренне устройство языка php. Не факт, что язык php, который имеет булев тип, он его хранит в памяти так же, как, например, C#. Вполне возможно, что в памяти они предствалены по-разному. Браузер ничего о типах не знает. Все данные он получает в виде строк. Когда что-то отдаем в браузер через echo или print, то все передаваемое конвертируется в строку.
В разных языках программирования разное колличество типов. В php — 8 простых типов:
- Скалярные типы:
- boolean.
- integer (целые числа).
- float (число с плавающей точкой).
- string (строка).
- Смешанные типы:
- array (массив).
- object (объект).
- Специальные типы:
- resourse.
- NULL.
Содержание статьи
Тип boolean
Простейший тип, выражает истинность значения. Возвращает TRUE или FALSE (регистронезависимы). Используется в качестве флагов. При передаче в браузер true конвертируется в строку ‘1’, а false — приводится к пустой строке. Пример см. внизу.
Тип integer и float
Integer — это целые положительные и отрицательные числа. Дробные числа (вещественные или с плавающей точкой) — тип float. Пример см. внизу страницы.
Тип string
Строки можно помещать в одинарные и двойные кавычки. В двойные кавычки можно подставлять значение переменных. Внутри двойных кавычек можно использовать спецсимволы (они экранируются знаком ‘\’). Внутри двойных кавычек можно использовать одинарные кавычки (но не двойные снова, иначе ошибка кода). В других языках так нельзя делать. Примеры см. внизу страницы.
Тип string (heredoc)
Синтаксис:
$a = <<<LABEL текст и символы LABEL;
Т.е. Ставится некая уникальная метка (любое слово), которая характеризует эту строку. Внутри пишем любой текст и символы (спецсимволы не надо экранировать, это произойдет автоматически). В конце ставим такую же метку — как закрывающий тэг. У heredoc — три подводных камня, каждый может привести к критической ошибке:
- После открывающей метки в строке не должно быть ничего, даже пробела.
- После закрывающей метки в строке не должно быть ничего, даже пробела.
- Перед закрывающей меткой в строке не должно быть ничего, даже пробела.
При неправильном heredoc выскакивает опасная ошибка ‘unexpected $end’ (не найдено окончания блока кода) и указывает на конец кода. Найти ошибку в коде сложно. Поэтому возьмите за правило: если пишем блок кода, сначала открыли, потом закрыли, а затем уже пишем внутри блока код.
Тип NULL
Если в языке javascript есть понятие NULL и undeffined, и надо оба проверить, то в php легче. Переменная считается NULL, если:
- Она не существовала.
- Переменной была присвоена константа NULL.
- Она была удалена с помощью unset ().
$a = false; //присвоили значение false $b = true; //присвоили начение true $c = 999; //тип integer $d = 0111 //тип integer в восьмеричном формате $e = 0x7FFFFFFF //тип integer в шестнадцатеричном формате $f = 1.2e2 //тип float $f = 1.45 //тип float echo "How are you $user"; //тип string двойные кавычки echo "Hi \n\t $user"; //тип string спецсимволы echo "How 'are' you?" //тип string одинарные кавычки внутри $y = echo $ABC; // тип NULL, переменной не существует
Тип array
Если обратиться к переменной как к ‘$a[ ]’ — то мы обращаемся к массиву. Квадратные скобки указывают на ячейку массива. Нумерация ячеек начинается с нуля. Есть функция count (массив) — считает количество элементов массива. Если присваивать значение пустой ячейке, то она автоматически нумеруется (присваивается индекс наибольший, следующий за наибольшим).
$user[]= "Jane";//индекс 0 $user[]= "admin";//индекс 1 $user[]= "12345";//индекс 2 //тоже, что и $user[0]= "Jane";//индекс 0 $user[1]= "admin";//индекс 1 $user[2]= "12345";//индекс 2 //или $user = array("Jane", "admin", "12345"); //тоже, что и $user = array(0=>"Jane", 1=>"admin", 2=>"12345"); $cnt = count($user); //Считаем ячейки echo $user[1];// выведет вторую ячейку admin
Когда появляется множество значений, никто их не громоздит в переменные. Все данные сразу запихивают в массив.
Функция для просмотра содержимого массива — print_r ($массив). В итоге получим табличку из ключ => значение. Недостатки: не видно, сколько всего ячеек, если их много, то устанешь считать. Нам не видно, какие типы там лежат.
Поэтому для более детального просмотра содержимого массива есть функция ‘var_dump ($array)’. Она показывает сразу количество ячеек в массиве, показывает типы в ячейках (string, int, bool).
Ассоциативный массив
Если пользователь прислал много данных о себе (e’mail, пароль, телефон, адрес, ФИО), то долго будем вспоминать, по каким номерам (ячеек массива) их вывести в тексте. Поэтому ячейкам задаются не номера, а имена. А вывести значение ячейки можно по имени.
$user["name"]= "John"; $user["login"]= "root"; $user["password"]= "p@ssw0rd"; //можно мешать индексы и имена ячеек $user[] = "312-34-85";// имеет индекс 0 echo $user["name"];//John
Многомерный массив
Часто встречаются многомерные массивы. Один массив внутри другого, и так до бесконечности. Вложенность не ограничена.
$users = array( 0 => array( "login" => "admin", "password" => "12345"), 1 => array( "login" => "Jane", "password" => "12345") );
Доступ к символу в строке
Чтобы получить доступ к любому символу в строке, смотрите пример. В фигурных кавычках укажем номер символа. Нумерация символов начитается с нуля.
$z = 'Good morning'; $f = $z{0}; //выведет первый символ G $end = $z{strlen($z)-1}; // вернет последний символ в строке - g