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;
С этой темой смотрят: