§2. Типы данных
2.1. Понятие типов данных.
Когда мы имеем дело со значениями в программе, например, присваивая их для хранения переменной или передавая в качестве аргументов функции, нам приходится манипулировать различными типами этих значений (типами данных), такими, например, как числа или строки. Всего в PHP поддерживается восемь типов данных:
- bool – логический тип, который содержит всего два значения: TRUE и FALSE;
- integer – целочисленный тип, т.е. отрицательные, ноль и положительные целые числа, например, -8, 0 или 47;
- float – вещественные числа (числа с плавающей точкой), например, -0.5, 4.25 или 1.23e-3 (экспоненциальная форма записи);
- string – строки, т.е. текст произвольной длины, взятый в одинарные или двойные кавычки, например, "...вышли на прогулку." или '25';
- array – массивы, например, [2, "house", -0,23];
- object – объекты (будут рассмотрены в отдельном параграфе);
- resource – ресурсы;
- NULL – специальное значение NULL.
Однако программисту в большинстве случаев не требуется явно устанавливать тип переменной, т.к. PHP относится к языкам программирования с нестрогой типизацией данных, т.е. тип переменной определяется самим PHP во время выполнения скрипта в зависимости от конкретной ситуации, в которой используется переменная. Например, если программа ожидает получить строку, а ей передается число, интерпретатор PHP автоматичеки преобразует число в строку. Если же программисту все таки потребуется явно задать тип переменной, следует воспользоваться приведением типа, но об этом мы поговорим чуть ниже.
2.2. Логический (булев) тип данных.
Логический тип выражает истинность или ложность и состоит, соответственно, всего из двух представителей TRUE и FALSE. Оба эти значения являются регистронезависимыми. Логические значения обычно являются результатом операций сравнения, особенно в выражениях управляющих конструкций, где они определяют ход дальнейших действий программы (см. пример 2.1).
<?php $boolean_var=true; //Присвоили логическое значение true if($boolean_var==true){ //Если условие истинно echo 'Выражение истинно.' }else{ //Иначе echo 'Выражение ложно.' } $boolean_var_2=false; //Присвоили логическое значение false ?>
Пример 2.1. Использование логических значений
2.3. Целые числа.
В PHP целые числа могут быть указаны в десятичной, шестнадцатеричной (перед числом ставится 0x), восьмеричной (перед числом ставится 0) или двоичной системе счисления (перед числом ставится 0b). Также можно указывать необязательные знак плюс '+' или минус '-' (см. пример 2.2).
<?php $a=10; //10, записанное в десятичной системе счисления $b=-10; //Отрицательное число /* Число 10 в других системах счисления */ $c=012; //восьмеричной (перед числом ставится ноль) $d=0x0A; //шестнадцатеричной (перед числом ставится ноль, затем x) $e=0b1010; //двоичной (перед числом ставится ноль, затем b) ?>
Пример 2.2. Представление целых чисел в различных системах счисления
Максимальный размер целого числа хранится в константе PHP_INT_MAX и, как правило, примерно равен 2 миллиардам для 32-битных платформ или 0.9e17 для 64-битных платформ. Если в результате вычислений размер целого числа превысит максимально допустимое для данной платформы значение, интерпретатор PHP будет обрабатывать его как вещественное число.
Также отметим, что в PHP не существует оператора деления '/' целых чисел, поэтому результатом деления, например, 5/10 будет вещественное число 0.5.
2.4. Вещественные числа.
Вещественные числа (по-другому числа с плавающей точкой) записываются в одном из форматов, представленном в примере 2.3. Числа, расположенные в третьей и четвертой строках, представляют собой записи вещественных чисел в экпоненциальной форме, где вместо 10 в указанной степени используется прописная или строчная буква E, после которой ставится необязательный знак плюс '+' или минус '-' и в конце записывается показатель степени числа 10.
<?php $a=123.45; //Положительное вещественное число $b=-123.45; //Отрицательное вещественное число $c=-.45; //Тоже самое, что и -0.45, т.к. ноль разрешается опускать $d=1.2345e2; //Тоже самое, что и 123.45 $e=1.2345E-3; //Тоже самое, что и 0.0012345 ?>
Пример 2.3. Запись вещественных чисел в различных форматах
Числа с плавающей точкой имеют ограниченную точность, что может иногда приводить к неожиданным результатам (см. пример 2.4). Это связано с тем, что мы в основном привыкли вести расчеты в десятичной системе счисления, а компьютер перед вычислениями преобразует все числа в двоичную систему. Но не все вещественные числа могут быть точно преобразованы из десятичной системы счисления в двоичную, что и приводит к некоторой потере точности. Поэтому не стоит сравнивать вещественные числа и доверять их точности до последнего знака. Если же необходима высокая точность представления вещественных чисел, следует использовать специальные математические функции PHP произвольной точности, которые позволяют задать требуемую точность результата.
<?php $a=0.7; $b=0.1; $c=floor(($a+$b)*10); //Функция floor() округляет число вниз echo $c; //Выведет 7 вместо ожидаемых 8 /* При переводе чисел в двоичную систему была потеряна точность и поэтому округление вниз применялось не к числу 8, а какому-то другому, меньшему числу, но близкому к 8 */ ?>
Пример 2.4. Побочные эффекты сложения вещественных чисел
Операции с вещественными числами иногда могут приводить к специальному нечисловому результату, который в PHP представлен константой NAN (от англ. not a number). Обычно это может быть связано с выполнением недопустимых математических операций над числами или выходом за допустимый диапазон значений для данной математической функции. Любое сравнение значения NAN с другим значением, даже с самим собой, всегда вернет FALSE, поэтому для определения ее наличия необходимо использовать специальную функцию is_nan(), которая вернет TRUE, если значение NAN, и FALSE в противном случае (см. пример 2.5).
<?php $a=sqrt(-10); //Пытаемся извлечь квадратный корень из //отрицательного числа, используем функцию sqrt() echo $a.'<br>'; //Выведет 'NAN' (не число) echo is_nan($a); //Выведет '1', что соответствует 'true', т.к. //оператор echo выводит текст и перед выводом //преобразует все типы данных в строковый тип $b=($a!=$a); //Можно использовать и сравнение на 'не равно', ведь //если значение переменной является NaN, то сравнение //вернет true, т.к. только NaN не равно само себе!!! //Здесь мы присвоили результат сравнения переменной $b echo $b.'<br>'; //Выведет '1', что соответствует 'true' ?>
Пример 2.5. Константа NAN
2.5. Строки.
Строки представляют собой обычные последовательности из нуля и более символов. В PHP отсутствует встроенная поддержка стандарта Unicode, поэтому он поддерживает ровно 256 различных символов, каждый из которых представляет собой один байт. Также отметим, что в PHP строки не могут быть размером более 2Гб.
Для определения строк могут быть применены четыре различных способа, использующих одинарные кавычки, двойные кавычки, heredoc-синтаксис и nowdoc-синтаксис.
Способ определения строки при помощи одинарных кавычек наиболее простой, однако при этом переменные, использующиеся внутри них, не могут быть интерпретированы и рассматриваются, как обычные символы. Кроме того, не обрабатываются и управляющие последовательности для специальных символов, которые также будут выведены как есть, т.е. в виде обычного текста (см. пример 2.6). Исключение составляют лишь экранируемая одинарная кавычка \' и сам экранируемый обратный слэш \\. Экранировать данные символы при помощи обратного слэша необходимо для того, чтобы интерпретатор мог понять, что еще не наступил конец строки там, где он встретил одиночную кавычку, находящуюся за обратным слэшем. Тоже самое касается и самого обратного слэша. Увидев комбинацию из двух обратных слэшей, интерпретатор поймет, что программист намерен вывести сам символ обратного слэша, а не экранировать какой-нибудь символ. Если в строке, взятой в одинарные кавычки, применить двойные кавычки, то они также, как и все остальные символы, будут выводиться в виде обычного текста.
<?php $c='Я – строка в одинарных кавычках.';//Присвоили строку в одинарных кавычках $d="Я – строка в двойных кавычках."; //Присвоили строку в двойных кавычках $e='Я – очень длинная строка, поэтому меня разместили на двух строках.<br>'; //Если строка окажется слишком длинной, //то ее можно разместить на нескольких строках echo $e; //Выводим строку echo "Он сказал: 'Это PHP!'<br>"; //Используем одинарные кавычки внутри двойных echo 'Он сказал: "Это PHP!"<br>'; //Используем двойные кавычки внутри одинарных echo 'Он сказал: \'Это PHP!\'<br>';//Экранируем одинарные кавычки внутри одинарных echo "Он сказал: \"Это PHP!\"<br>";//Экранируем двойные кавычки внутри двойных echo "Выводим символы \x7e, \x60, \x5e."; //Выводим символы через их коды ?>
Пример 2.6. Использование строк, заключенных в одинарные и двойные кавычки
В случае использования переменных внутри строки (смотреть) ее следует заключать в двойные кавычки, что также расширит и список разрешенных управляющих последовательностей для специальных символов (см. пример 2.6):
- \n – новая строка;
- \r – возврат каретки;
- \t – горизонтальная табуляция;
- \v – вертикальная табуляция;
- \e – escape-знак;
- \f – подача страницы;
- \\ – обратная косая черта;
- \$ – знак доллара;
- \" – двойная кавычка;
- \x[0-9A-Fa-f]{1,2} – символ, заданный одной или двумя цифрами в шестнадцатеричной системе счисления.
Другие символы интерпретатор экранировать не будет, вместо этого он поступит также, как и в случае со строкой, заключенной в одинарные кавычки, т.е. выведет как сам символ, так и обратный слэш.
В PHP существует еще два способа определения строк – это синтаксисы heredoc и nowdoc. Строка, определенная при помощи синтаксиса heredoc ведет себя также, как и строка в двойных кавычках, при этом их не имея, а nowdoc-текст ведет себя как строка в одинарных кавычках, но также их не имея. Эти особенности позволяют обойтись без экранирования двойных и одинарных кавычек внутри строк, определенных данными способами (см. пример 2.7).
<?php $a=25; //Определили переменную для вывода в heredoc $b=<<<HD Я – многострочная строка, написанная при помощи<br> синтаксиса heredoc. Двойные "кавычки" первого<br> уровня экранировать не нужно. Можно также <br> применять переменные, например, $a или {$a}aa.<br><br> HD; echo $b; //Выведет всю строку с интерполированными переменными $s=<<<'ND' Я – многострочная строка, написанная при помощи <br> синтаксиса nowdoc. Меня удобно применять для внедрения <br> больших фрагментов текста без необходимости его экранирования. <br>Переменные применять нельзя, т.к. выведет просто $a или {$a}. ND; echo $s; //Выведет всю строку как есть ?>
Пример 2.7. Использование синтаксисов heredoc и nowdoc
Heredoc-текст создается следующим образом: в отдельной строке записывается последовательность символов <<<, после чего указывается идентификатор, который должен соответствовать общим правилам создания идентификаторов, затем с новой строки записывается весь необходимый текст, а в самом конце в отдельной строке опять записывается идентификатор и после него ставится точка с запятой.
Nowdoc-текст создается аналогичным образом, за исключением того, что идентификатор после символов <<< должен заключаться в одинарные кавычки.
Важно иметь в виду, что после <<<[идентификатор] должен стоять только перевод строки и больше никаких символов. Строка с закрывающим идентификатором также должна содержать только [идентификатор] и точку с запятой, исключая наличие символов табуляции или пробелов (см. пример 2.7).
Довольно часто возникает необходимость объединения двух и более строк в одну строку. Такой процесс называется конкатенация (от англ. concatenation). Осуществляется он при помощи обычной точки (см. пример 2.8). Забегая немного вперед, отметим, что при конкатенации со строкой значения любого типа будут также преобразованы в строку.
<?php $str_1='Один '; //Определили первую строку $n=2; //Присвоили переменной число echo $str_1.$n."<br>"; //Выведет строку 'Один 2' echo "Выводим ".'объединенную'.' строку.' ?>
Пример 2.8. Конкатенация строк
2.6. Массивы.
Перечисленные выше четыре типа данных относятся к скалярным (простым) типам данных. Что касается массивов, то они представляют смешанный тип данных, к которому также относятся объекты (их мы расмотрим в отдельном параграфе).
Массив (от англ. array) – это упорядоченный набор значений, которые объединены общим именем. Под именем массива подразумевается имя переменной, которой присваивается массив, а сами значения называются элементами массива. Доступ к ним может быть получен при помощи уникального целочисленного или строкового индекса, который присваивается каждому элементу массива.
Если в качестве индексов используются только целые числа, то массив называют индексированным или просто массивом. Если же в качестве индексов используются как целые числа, так и строки, то такой массив называют ассоциативным, а его индексы называют ключами. При этом для ассоциативных массивов можно встретить такие названия, как хеш или словарь.
В PHP не делается различия между индексированными и ассоциативными массивами, а индексы принято называть ключами.
Также отметим, что в PHP массивы являются:
- нетипизированными – элементы одного и того же массива могут относиться к разным типам данных, включая другие массивы, например, [5, "Вася", NULL, ["фамилия", "город"], 34.5];
- динамическими – объявлять фиксированный размер массива не нужно, а удалять или добавлять новые элементы можно в любое время по мере необходимости.
Для создания массивов используется специальная языковая конструкция array(), в которой в качестве параметров через запятую указываются пары 'key=>value' (т.е. 'ключ=>значение'), или квадратные скобки, которые заменяют конструкцию array(), представляя собой более короткий синтаксис определения массивов. После создания массивов доступ к его элементам может быть получен по их ключам, которые необходимо указывать в квадратных скобках после имени массива (см. пример 2.9).
<?php $m_1=array( 'country'=>'Belarus', // Создали одномерный массив с двумя 'city'=>'Minsk' //элементами и присвоили его переменной ); //Не забываем про точку с запятой в конце инструкции! echo $m_1["country"]."<br>"; //Выведет строку 'Belarus' $m_2=[ 'country'=>'Russia', // Создали одномерный массив при 'city'=>'Moscow' // помощи квадратных скобок ]; echo $m_2["city"]."<br>"; //Выведет строку 'Moscow' ?>
Пример 2.9. Создание массивов
При создании массивов или добавлении новых элементов разрешается не указывать ключи элементов. В таком случае при создании массивов интерпретатор PHP будет нумеровать элементы начиная с нуля, а при добавлении новых элементов в массив использовать предыдущее наибольшее значение числового ключа, но увеличенное на единицу. Также разрешается указывать ключи только для некоторых элементов массива, остальные будут пронумерованы автоматически. Отметим, что если несколько значений будут использовать одинаковый ключ, то использоваться будет только последнее из них, а все остальные значения будут перезаписаны (см. пример 2.10).
<?php $m_1=[2,4,76]; //Не указываем ключи вообще echo $m_1[0]." ".$m_1[2]; //Выведет '2 76' //echo $m_1[3]; //Сообщит об ошибке, т.к. в массиве присутствует //только три элемента с ключами 0, 1 и 2 $m_2=["имя"=>"Вася",8.56,100]; //Указали ключ первого элемента, а для второго //и третьего элементов интерпретатор автоматически установит числовые //ключи, равные 0 (т.к. других числовых ключей в массиве пока нет) //и 1 (на единицу больше, чем 0) echo $m_2["имя"]." ".$m_2[0]." ".$m_2[1]; //Выведет строку 'Вася 8.56 100' $m_3=[2=>"php",' ',"версия"=>'7.0.0']; //Указали числовой ключ первого элемента, //а для второго элемента (строка состоящая из пробела) интерпретатор //автоматически установит числовой ключ, равный 3 (2+1) echo $m_3[2].$m_3[3].$m_3["версия"]; //Выведет строку 'php 7.0.0' //echo $m_3[1]; //Сообщит об ошибке, т.к. нумерация в массиве начинается с 2 $m_4=[3,5=>"orange",5=>"apple",33]; //Указали одинаковые ключи, поэтому //доступно будет только последнее значение, т.е. "apple", кроме того, //числовой индекс последнего элемента будет равен 6 (5+1) echo $m_4[0]." ".$m_4[5]." ".$m_4[6]; //Выведет строку '3 apple 33' //echo $m_4[1]; //Сообщит об ошибке, т.к. элемента с таким ключем в массиве нет /* Не забываем, что при конкатенации со строкой значения любого типа будут также преобразованы в строку!!! */ ?>
Пример 2.10. Особенности использования ключей элементов массива
В зависимости от того, какой тип данных использовался для указания ключей элементов массива, интерпретатор может внести свои коррективы, сделав следующие преобразования:
- строки, содержащие целое число, преобразуются к целочисленному типу integer, например, ключ со значением '3' будет сохранен со значением 3, хотя значение '03' не будет преобразовано, т.к. оно не является верной записью десятичного целого числа;
- вещественные числа (тип float) также преобразуются к целочисленному типу, при это никаких округлений не производится, интерпретатор просто отбрасывает дробную часть; например, ключ со значением 4.9 будет сохранен со значением 4;
- к целочисленному типу преобразовываются и логические значения (тип bool), например, ключ со значением true будет сохранен со значением 1, а false – со значением 0;
- в качестве ключа можно использовать и значение null (тип null), но оно, опять же, будет преобразовано интерпретатором в пустую строку, в результате чего ключ будет сохранен со значением "" (пустая строка);
- Массивы (тип array) и объекты (тип object) в качестве ключей использовать нельзя.
Как было сказано выше, для доступа к элементу массива нужно указать его ключ в квадратных скобках после имени массива. Если элементом массива является другой массив, то для доступа к значению такого элемента-массива следует применять еще одни квадратные скобки с указанным в них ключем (см. пример 2.11). Кстати, вместо квадратных скобок для доступа к элементам массива допускается использование фигурных скобок '{' и '}', но мы будем использовать только квадратные скобки.
<?php $m_1=[ "apple", "my_array"=>[4,12], "building"=>'house' ]; //Создаем массив echo $m_1[0].'<br>'; //Выведет строку 'apple' echo $m_1["building"].'<br>'; //Выведет строку 'house' echo $m_1["my_array"][0].'<br>'; //Выведет '4' ?>
Пример 2.11. Доступ к элементам массива
Для добавления элемента в массив или его изменения также необходимо указать новый или существующий ключ в квадратных скобках после имени массива, после чего присвоить требуемое значение. В результате будет либо добавлен новый элемент в массив, если элемента с таким ключем не существовало, либо изменено значение существующего элемента с таким ключем (см. пример 2.12). Более того, при добавлении нового элемента в массив можно вообще не указывать ключ, а просто добавить пустые квадратные скобки (фигурные скобки применять не разрешается).
<?php $m_1=array( 3=>"fruit", //Нумерация элементов начинается с 3 33, //Значит данный элемент будет иметь ключ со значением 4 "number"=>7 ); //Создаем массив $m_1[0]=24; //Добавили в массив новый элемент со значением ключа 0 $m_1[]="one"; //Добавили в массив новый элемент, которому интерпретатор //присвоит ключ со значением 5 (на 1 больше максимально //существующего, а это 4) $m_1["city"]="Minsk"; //Добавили элемент в массив со значением ключа "city" $m_1["number"]=88; //Изменили значение элемента массива echo $m_1[0].'<br>'; //Выведет строку '24' echo $m_1[5].'<br>'; //Выведет строку 'one' echo $m_1["city"].'<br>'; //Выведет строку 'Minsk' echo $m_1["number"]; //Выведет '88' /* Напомним, что оператор echo выводит строки, хотя мы часто не указываем этого явно */ ?>
Пример 2.12. Добавление или изменение элементов массива
Для удаления пары 'key=>value' или всего массива следует использовать функцию unset(). Также следует помнить, что массив представляет собой набор значений, которые присвоены переменной. Поэтому, если этой переменной присвоить другое значение, например, число или строку, то массив будет удален, а в переменной будет храниться новое значение (см. пример 2.13).
<?php $m_1=array( 3=>"fruit", //Нумерация элементов начинается с 3 33, //Значит данный элемент будет иметь ключ со значением 4 "number"=>7 ); //Создаем массив unset($m_1[3]); //Удалили элемент из массива echo $m_1[3].'<br>'; //Интерпретатор выведет ошибку, т.к. такого элемента //больше в массиве нет unset($m_1); //Удалили весь массив echo $m_1; //Интерпретатор выведет ошибку о том, //что такой переменной не существует $my_array=[2,45]; //Создаем массив из двух элементов $my_array=5; //Присваиваем переменной новое значение, при этом массив //с именем "my_array" будет удален echo $my_array; //Выведет '5' ?>
Пример 2.13. Удаление элементов массива и самого массива
В PHP для работы с массивами и обработки его данных предусмотрено значительное количество стандартных функций, многие из которых будут рассмотрены нами во второй части учебника.
2.7. Ресурсы.
Переменные специального типа resource содержат ссылки на внешние ресурсы и представляют собой обычные текстовые строки, содержащие идентификаторы, при помощи которых интерпретатор определяет необходимые внешние источники и взаимодействует с ними. Создаются и используются ресурсы при помощи специальных функций, которые будут рассмотрены нами во второй части учебника. Пока же просто следует иметь в виду, что существуют данные и такого типа.
2.8. Значение NULL.
Специальное значение null является единственным представителем типа данных NULL. Значение является константой, которая не чуствительна к регистру символов. Интерпретатор принимает значение переменной за null, если
- ей явно было присвоено значение null,
- ей вообще не было присвоено значение,
- она была удалена с помощью функции unset().
2.9. Манипуляции с типами.
Поскольку PHP относится к языкам программирования с нестрогой типизацией данных, довольно часто получается так, что интерпретатор ожидает получить данные одного типа, а вместо этого получает данные другого типа. В таких случаях он просто осуществляет преобразование полученных данных к нужному типу.
Приведением типа называется процесс преобразования значения одного типа в значение другого типа.
Не смотря на то, что в большинстве случаев интерпретатор самостоятельно занимается приведением типов, у программиста также имеется возможность устанавливать и изменять тип переменной при помощи оператора приведения типа, который представляет собой имя типа в круглых скобках, записываемое перед переменной. В PHP применяются следующие операторы приведения типа:
- (bool), (boolen) – приведение к логическому типу;
- (int), (integer) – приведение к целочисленному типу;
- (float), (double), (real) – приведение к вещественному типу;
- (string) – приведение к строковому типу;
- (array) – приведение к типу array;
- (object) – приведение к типу object;
- (unset) – приведение к NULL.
В ходе приведения типов, во избежание непредвиденных результатов, следует знать правила, по которым происходит преобразование данных одного типа в другой. Перечислим их, после чего рассмотрим пример кода, содержащего данные преобразования типов.
-
Приведение к типу bool.
Во время преобразования к данному типу следующие значения рассматриваются как FALSE:- само значение false,
- 0 и 0.0,
- пустая строка "" и строка "0",
- массив без элементов (пустой массив) [],
- значение null,
- объект SimpleXML, созданный из пустых тегов.
Все остальные значения преобразуются в значение TRUE, включая значения типа resource, а также число -1, поскольку оно представляет собой обычное отрицательное число, отличное от нуля.
-
Приведение к типу integer.
- Логическое значение true преобразуется в 1, false – в 0.
- Значение null преобразуется в 0.
- Вещественные числа округляются вниз, т.е. в сторону нуля. Например, в случае приведения вещественного числа 7.9 к целочисленному типу оно будет преобразовано в число 7. При этом вещественное число не должно превышать максимально допустимые для целых чисел размеры (смотреть), иначе результат будет неопределенным, что вызвано отсутствием достаточной точности у вещественных чисел, чтобы вернуть верный результат. Более того, в данном случае не будет выведено даже замечания. Также не стоит приводить неизвестную дробь к целочисленному типу во избежание получения неожиданных результатов. Например, если привести к типу integer результат выражения '(0.1+0.7)*10', то интерпретатор преобразует его в число 7, а не 8, как ожидалось.
- Если строка начинается с верной записи целого числа, то интерпретатор в процессе приведения строки к целочисленному типу вернет это число, отбросив всю остальную часть строки. Если же строка является пустой "" или начинается не с цифры, знака плюс '+' или знака минус '-', она будет преобразована в число 0. Например, строка '-25 яблок' будет преобразована в число -25, строка '3.5 яблока' – в число 3, а строка 'Яблок было 25' – в число 0.
Для других типов данных приведение к целочисленному типу не определено, поэтому не стоит доверять текущему наблюдаемому поведению, так как оно может измениться без предупреждения.
-
Приведение к типу float.
Для всех типов, за исключением строк, сперва будет совершено преобразование в целочисленный тип, а уже потом целое число будет преобразовано в вещественное. Что касается строк, то:- если строка начинается с верной записи вещественного числа (включая экспоненциальную форму записи), интерпретатор в процессе приведения строки к вещественному типу вернет это число, отбросив всю остальную часть строки;
- если же строка является пустой "" или начинается не с цифры, знака плюс '+', знака минус '-' или символа точки '.' (напомним, что при записи вещественных чисел перед точкой ноль разрешается опускать), то она будет преобразована в число 0.
-
Приведение к типу string.
- Логическое значение true преобразуется в строку "1", false – в пустую строку "".
- Целое или вещественное число преобразуется в строку, состоящую из самого числа. При этом учитывается и показатель степени вещественного числа. Например, число 1.567e2 будет преобразовано в строку '156.7', а число .5 – в строку '0.5'.
- Специальное значение null преобразуется в пустую строку "".
- Массивы всегда преобразуются в строку 'Array'.
- Ресурсы (данные типа resource) преобразуются в строку вида "Resource id #№", где № – номер ресурса во время выполнения.
-
Приведение к типу array.
В случае преобразования значения типа bool, integer, float, string или resource в массив, результатом будет массив с этим элементом, индекс которого будет равен 0. -
Приведение к типу NULL.
Явное приведение переменной к специальному значению null с использованием конструкции '(unset) $var' не удаляет переменную и ее значение, а только возвращает значение null для дальнейшего использования.
Код, содержащий операции приведения типа, представлен в примере 2.14.
<?php $var_1=true; //Присвоили логическое значение true $var_2=false; //Присвоили логическое значение false $var_1=(integer) $var_1; //Теперь $var_1==1 $var_2=(integer) $var_2; //Теперь $var_2==0 $var_1=(string) $var_1; //Теперь $var_1=="1" $var_2=(string) $var_2; //Теперь $var_2=="0" //------------------------------------------------ $var_3="-1"; //Присвоили строку "-1" $var_4=".9345E3"; //Присвоили строку ".9345E3" $var_3=(bool) $var_3; //Теперь $var_3==1 $var_4=(integer) $var_4; //Теперь $var_4==0 //------------------------------------------------ $var_5="-.57"; //Присвоили строку "-.57" $var_6=.9345E3; //Присвоили вещественное число, тоже //самое, что и 934.5 $var_5=(array) $var_5; //Теперь $var_5==["-.57"] $var_6=(array) $var_6; //Теперь $var_6==[934.5] ?>
Пример 2.14. Приведение типов переменных
Преобразование значений в тип resource не имеет смысла. Что касается приведения объектов к другим типам, а также преобразования значений разных типов в объект, то о них мы поговорим позже в соответствующем разделе.
Контрольные вопросы и задания
- Перечислите типы данных, используемые в PHP.
- Что означает понятие нестрогой типизации данных?
- Опишите логический тип данных.
- Опишите целочисленный тип данных. Какая константа хранит максимальный размер целого числа для данной платформы?
- Каков формат записи вещественных чисел в экспоненциальной форме?
- Что представляет собой константа NaN?
- В чем заключается разница между строками взятыми в одинарные и двойные кавычки?
- Для чего в строках используется обратный слэш?
- Опишите способы определения строк при помощи синтаксисов heredoc и nowdoc.
- Что такое конкатенация?
- Дайте определение массиву. Какие массивы называют ассоциативными?
- Что означают понятия нетипизированного и динамического массивов?
- Как в PHP создаются массивы? Опишите особенности использования ключей элементов массива.
- Как осуществляется доступ к элементам массива, а также добавление, изменение значений или удаление элементов массива?
- Что представляет собой тип данных resource?
- Опишите тип данных NULL.
- Дайте определение приведению типов. Перечислите использующиеся в PHP операторы приведения типов.
- Опишите правила приведения к каждому из описанных нами типов данных.
Словарь новых английских слов
boolean [bʊˈlɪən] – логический тип. integer [ˈɪntɪdʒə] – целое число. float [fləʊt] – плавать, число с плавающей точкой. string [strɪŋ] – струна, строка. array [əˈreɪ] – массив. object [ˈɒbdʒɪkt] – объект, предмет. resource [rɪˈsɔːs] – ресурс. null [nʌl] – отсутствующий, нулевой. true [truː] – истинный, верный. |
false [fɔːls] – ложный, неверный. number [ˈnʌmbə] – число, количество. here [hɪə] – здесь, тут. now [naʊ] – теперь, сейчас. concatenation [kənkatəˈneɪʃn] – сцепление. key [kiː] – ключ. value [ˈvæljuː] – значение. unset [ʌnˈsɛt] – сброс. |