Преобразования типов

Как и в других языках, если операнды в выражениях (арифметических, сравнения или логических) имеют разные типы, они приводятся к одному типу.

Так, в арифметических выражениях все операнды преобразуются в числа, при этом, если хотя бы одно из чисел является числом с плавающей точкой, все операнды приводятся к виду с плавающей точкой (иначе все операнды представляются как целые числа).

В операциях отношения и логических операциях операнды приводятся к булевскому типу.

Так как PHP является языком со свободным объявлением типа, то в операторе присваивания переменная, стоящая слева приобретает тот же тип, что и тип выражения, стоящего справа.

В PHP можно использовать явное приведение типа (type casting), указав перед переменной или выражением имя типа, к которому надо привести эту переменную или выражение, в скобках.

Пример 4.6.44. Преобразование типов в выражении:

1. Неявное преобразование типа:

После выполнения оператора:

$a = 3 + 1.5;

переменная $a будет иметь значение 4.5 и тип float.

2. Явное преобразование типа:

$a = (int)(3 + 1.5);

После выполнения этого оператора переменная $a будет иметь значение 4 и тип int (integer).

При преобразовании переменных или выражений из одного типа в другой действуют следующие правила:

Преобразование в тип boolean (bool). При преобразовании в булевский тип следующие переменные рассматриваются как false: число 0 (типа integer), число 0.0 (типа float), пустая строка или строка "0" (типа string), массив с нулевым числом элементов (типа array), объект с нулевым количеством переменных (типа object) и значение NULL. Все остальные значения (включая все значения типа resource) рассматриваются как true.

Пример 4.6.45. Преобразование в булевский тип:

$a = ""; // $a определена как пустая строка

$a = (bool) $a; // $a получит значение false

$b = 12; // $b определена как целое число,

// не равное 0

$b = (bool) $b; // $b получит значение true

Преобразование строки в число. Строка преобразуется в вещественное число, если она содержит символы '.', 'e' или 'E', в противном случае она преобразуется в целое число. Если строка начинается с данных, которые могут интерпретироваться как число (целое или вещественное), то она преобразуется в это число, иначе строка преобразуется в целое число 0.

Пример 4.6.46. Преобразование строки в число:

// Строка преобразуется в целое число 12

$a = 1 + "12a"; // $a равно 13

// Строка преобразуется в вещественное число 1.2

$b = 5 + "12e-1a"; // $b равно 6.2

// Строка преобразуется в целое число 0

$c = 8 + "a12"; // $c равно 8

Преобразование в целое число. При преобразовании в целое число: булевские значения true и false преобразуются соответственно в 1 и 0, а вещественные числа округляются по нижней границе (целой части числа).

Если значение вещественного числа превышает диапазон, допустимый для целых чисел, то результат непредсказуем, причем никакого диагностического сообщения при этом не выдается.

Пример 4.6.47. Преобразование в целое число:

$a = true; // $a определено как булевское значение

$b = (int) $a; // $b – целое число со значением,

// равным 1

$c = 4.8; // $c определено как вещественное число

$d = (int) $c; // $d – целое число со значением,

// равным 4

Преобразование в вещественное число. При преобразовании булевских значений в вещественное число они сначала преобразуются в целые числа, а затем в вещественные 1.0 или 0.0. При преобразовании целого числа в вещественное возможны потеря точности и/или ошибки округления (поэтому к вещественным числам не рекомендуется применять операторы отношения "==" и "!=").

Пример 4.6.48. Преобразование в вещественное число:

$a = true; // $a определено как булевское значение

$b = (float) $a; // $b – вещественное число со значением,

// равным 1.0

$c = 4; // $c определено как целое число

$d = (float) $c; // $d – вещественное число со значением,

// равным 4.0

Преобразование в строку. Булевские значения true и false преобразуются соответственно в "1" и пустую строку "". Целые и вещественные числа преобразуются в свое строковое представление (включая степенную часть для вещественных чисел). Массивы и объекты преобразуются соответственно в строки "Array"и "Object". Ресурсы преобразуются в строку вида "Resource id #1", где 1 – уникальный идентификатор, который присваивается ресурсу во время выполнения. Значение NULL преобразуется в пустую строку.

Пример 4.6.49. Преобразование в строку:

$a = true; // $a определено как булевское значение

$b = (string) $a; // $b – строка со значением, равным "1"

$c = 4; // $c определено как целое число

$d = (string) $c; // $d – строка со значением, равным

$e = 4.5e-3; // $e определено как вещественное число

$f = (string) $e; // $f – строка со значением,

// равным "4.5E-3"

$g = array(1,2,3); // $g определено как массив

$h = (string) $g; // $f – строка со значением "Array",

Преобразование в массив. При преобразовании числа, строки, булевского значения или ресурса в массив создается массив с единственным элементом, имеющим индекс 0. При преобразовании объекта в массив значения переменных объекта становятся значениями элементов массива, а имена переменных – значениями ключей массива. При преобразовании значения NULL в массив создается массив с нулевым числом элементов.

Пример 4.6.50. Преобразование в массив:

$a = "String"; // $a определено как строка

$b = (array) $a; // Строка преобразуется в объект

$c = count($b); // $c – целое число со значением,

// равным 1

echo $b[0]; // Выведет 'String'

Ни один тип переменных не может быть преобразован в тип resource.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: