PHP: Приведение типов
- Приведение к целому числу
- Приведение к числу с плавающей точкой
- Приведение к булеву типу
- Приведение к строке
- Приведение к NULL
Приведение типа — это преобразование значения одного типа в значение другого типа.
Есть два вида приведения типов:
- явное
- неявное
Неявное приведение типа выполняется интерпретатором автоматически, без непосредственного участия программиста. Например, значение будет автоматически преобразовано, если оператор ожидает, числовые операнды:
$sum = "3" + 4; // Строка "3" будет неявно преобразована в число 3
Чтобы выполнить явное приведение, нужно указать в круглых скобках имя требуемого типа непосредственно перед приводимым значением или переменной:
<?php $num = (int)"50"; echo gettype($num); ?>
Запись имени типа в круглых скобках называется оператором приведения типа. Допускаются следующие операторы приведения типов:
(int), (integer)
— приведение кinteger
.(bool), (boolean)
— приведение кboolean
.(float), (double), (real)
— приведение кfloat
.(string)
— приведение кstring
.(array)
— приведение кarray
.(object)
— приведение кobject
.(unset)
— приведение кNULL
.
Приведение к целому числу
При приведении bool
в integer
, FALSE
преобразуется в 0 (нуль), а TRUE
— в 1 (единицу). При приведении float
в integer
, дробная часть будет округлена в сторону нуля. Значение NULL
преобразуется в 0:
echo (int)FALSE, "<br>"; // 0 echo (int)TRUE, "<br>"; // 1 echo (int)12.3, "<br>"; // 12 echo (int)NULL; // 0
Строки преобразуются по следующим правилам:
- Если первый символ строки является цифрой, знаком
+
или-
, то интерпретатор переходит к анализу второго символа, если второй символ строки является цифрой, то интерпретатор переходит к анализу третьего символа и так до тех пор, пока не будет обнаружен символ отличный от цифры, после этого интерпретатор возвращает полученное целое число. - Если строка пустая или первый символ строки не является цифрой, знаком
+
или-
, она преобразуется в 0.
echo (int)"12abc", "<br>"; // 12 echo (int)"a123bc", "<br>"; // 0 echo (int)"-12", "<br>"; // -12 echo (int)"12.3", "<br>"; // 12 echo (int)""; // 0
Для других типов поведение преобразования в integer
не определено. Поэтому не нужно полагаться на любое наблюдаемое поведение, так как оно может измениться без предупреждения.
Приведение к числу с плавающей точкой
Строки преобразуются по следующим правилам:
- Если первый символ строки является цифрой, точкой, знаком
+
или-
, то интерпретатор переходит к анализу второго символа, если второй символ строки является цифрой, точкой (если перед этим была цифра), буквойe
илиE
(если перед этим была цифра или точка), то интерпретатор переходит к анализу третьего символа и так до тех пор, пока не будет обнаружен символ, который не может быть преобразован в числовое значение, после этого интерпретатор возвращает полученное число с плавающей точкой. - Если строка пустая или первый символ строки не является цифрой, точкой, знаком
+
или-
, она преобразуется в 0.
echo (float)"12abc", "<br>"; // 12 echo (float)"a123bc", "<br>"; // 0 echo (float)"-12", "<br>"; // -12 echo (float)"12.3", "<br>"; // 12.3 echo (float)".13", "<br>"; // 0.13 echo (float)"1.2e5", "<br>"; // 120000 echo (float)"1.e5"; // 100000
Значения других типов сначала преобразуются в integer
, а затем уже из integer
происходит преобразование в тип float
.
Приведение к булеву типу
Следующие значения в результате преобразования дают значение FALSE
:
- само значение
FALSE
- 0 и 0.0 (нуль)
- пустая строка, и строка "0"
- массив без элементов
NULL
- Объекты
SimpleXML
, созданные из пустых тегов
Все остальные значения при преобразовании дают в результате значение TRUE
. Значение FALSE
и шесть значений, которые при преобразовании приводятся к этому значению, обычно называют ложными значениями, а все остальные — истинными:
echo (bool)"", ": FALSE", "<br>"; // FALSE echo (bool)1, ": TRUE", "<br>"; // TRUE echo (boolean)[], ": FALSE"; // FALSE
В любом контексте, когда интерпретатор PHP ожидает получить булево значение, ложные значения интерпретируются как FALSE
, а истинные значения — как TRUE
.
Приведение к строке
Булево значение TRUE
преобразуется в строку "1", а значение FALSE
преобразуется в ""
(пустую строку):
echo (string)TRUE; echo (string)FALSE, "<br>: пустая строка";
Целое число или число с плавающей точкой преобразуется в строку, состоящую из цифр числа:
echo (string)-123, "<br>"; echo (string)12.4, "<br>"; echo (string)1.4e6; // "1400000"
Массивы всегда преобразуются в строку "Array"
:
$arr = []; echo (string)$arr;
NULL
всегда преобразуется в пустую строку:
echo (string)NULL, "пустая строка";
Resource
всегда преобразуется в строку вида "Resource id #1"
.
Для преобразования объекта в строку, объект должен иметь метод __toString()
:
class Obj { public function __toString() { return "Object"; } } $obj = new Obj; echo (string)$obj;
Если объект не имеет метод __toString()
, то в результате преобразования будет вызвана фатальная ошибка:
class Obj {} $obj = new Obj; echo (string)$obj; // Будет вызвана ошибка
Приведение к NULL
Приведение к типу NULL
не удаляет переменную и её значение, а лишь возвращает значение типа NULL
:
$num = 10; echo gettype((unset)$num), "<br>"; echo $num;
С этой темой смотрят: