PHP: Приведение типов

Приведение типа — это преобразование значения одного типа в значение другого типа.

Есть два вида приведения типов:

Неявное приведение типа выполняется интерпретатором автоматически, без непосредственного участия программиста. Например, значение будет автоматически преобразовано, если оператор ожидает, числовые операнды:

$sum = "3" + 4;  // Строка "3" будет неявно преобразована в число 3

Чтобы выполнить явное приведение, нужно указать в круглых скобках имя требуемого типа непосредственно перед приводимым значением или переменной:

<?php
$num = (int)"50";
echo gettype($num);
?>

Запись имени типа в круглых скобках называется оператором приведения типа. Допускаются следующие операторы приведения типов:

Приведение к целому числу

При приведении 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

Строки преобразуются по следующим правилам:

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 не определено. Поэтому не нужно полагаться на любое наблюдаемое поведение, так как оно может измениться без предупреждения.

Приведение к числу с плавающей точкой

Строки преобразуются по следующим правилам:

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:

Все остальные значения при преобразовании дают в результате значение 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;

С этой темой смотрят:

Копирование материалов с данного сайта возможно только с разрешения администрации сайта
и при указании прямой активной ссылки на источник.
2011-2016 © puzzleweb.ru

Реклама на сайте | Обратная связь