Приведение типов данных php

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

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

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

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

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

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

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

  • (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, "
"; // 0 echo (int)TRUE, "
"; // 1 echo (int)12.3, "
"; // 12 echo (int)NULL; // 0

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

  • Если первый символ строки является цифрой, знаком + или — , то интерпретатор переходит к анализу второго символа, если второй символ строки является цифрой, то интерпретатор переходит к анализу третьего символа и так до тех пор, пока не будет обнаружен символ отличный от цифры, после этого интерпретатор возвращает полученное целое число.
  • Если строка пустая или первый символ строки не является цифрой, знаком + или — , она преобразуется в 0.
echo (int)"12abc", "
"; // 12 echo (int)"a123bc", "
"; // 0 echo (int)"-12", "
"; // -12 echo (int)"12.3", "
"; // 12 echo (int)""; // 0

Для других типов поведение преобразования в integer не определено. Поэтому не нужно полагаться на любое наблюдаемое поведение, так как оно может измениться без предупреждения.

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

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

  • Если первый символ строки является цифрой, точкой, знаком + или — , то интерпретатор переходит к анализу второго символа, если второй символ строки является цифрой, точкой (если перед этим была цифра), буквой e или E (если перед этим была цифра или точка), то интерпретатор переходит к анализу третьего символа и так до тех пор, пока не будет обнаружен символ, который не может быть преобразован в числовое значение, после этого интерпретатор возвращает полученное число с плавающей точкой.
  • Если строка пустая или первый символ строки не является цифрой, точкой, знаком + или — , она преобразуется в 0.
echo (float)"12abc", "
"; // 12 echo (float)"a123bc", "
"; // 0 echo (float)"-12", "
"; // -12 echo (float)"12.3", "
"; // 12.3 echo (float)".13", "
"; // 0.13 echo (float)"1.2e5", "
"; // 120000 echo (float)"1.e5"; // 100000

Значения других типов сначала преобразуются в integer , а затем уже из integer происходит преобразование в тип float .

Читайте также:  What is server and client in java

Приведение к булеву типу

Следующие значения в результате преобразования дают значение FALSE :

  • само значение FALSE
  • 0 и 0.0 (нуль)
  • пустая строка, и строка «0»
  • массив без элементов
  • NULL
  • Объекты SimpleXML , созданные из пустых тегов

Все остальные значения при преобразовании дают в результате значение TRUE . Значение FALSE и шесть значений, которые при преобразовании приводятся к этому значению, обычно называют ложными значениями, а все остальные — истинными:

echo (bool)"", ": FALSE", "
"; // FALSE echo (bool)1, ": TRUE", "
"; // TRUE echo (boolean)[], ": FALSE"; // FALSE

В любом контексте, когда интерпретатор PHP ожидает получить булево значение, ложные значения интерпретируются как FALSE , а истинные значения — как TRUE .

Приведение к строке

Булево значение TRUE преобразуется в строку «1», а значение FALSE преобразуется в «» (пустую строку):

echo (string)TRUE; echo (string)FALSE, "
: пустая строка";

Целое число или число с плавающей точкой преобразуется в строку, состоящую из цифр числа:

echo (string)-123, "
"; echo (string)12.4, "
"; echo (string)1.4e6; // "1400000"

Массивы всегда преобразуются в строку «Array» :

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), "
"; echo $num;

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

Источник

Манипуляции с типами

PHP не требует (и не поддерживает) явного определения типа при объявлении переменной; тип переменной определяется по контексту, в котором она используется. То есть, если вы присвоите строковое значение переменной $var, $var станет строкой. Если вы затем присвоите $var целочисленное значение, она станет целым числом.

Примером автоматического преобразования типа является оператор сложения ‘+’. Если любой из операндов является числом с плавающей точкой, то все операнды интерпретируются как числа с плавающей точкой, результатом будет также число с плавающей точкой. В противном случае операнды будут интерпретироваться как целые числа и результат также будет целочисленным. Обратите внимание, что это НЕ меняет типы самих операндов; меняется только то, как они вычисляются.

$foo = "0"; // $foo это строка (ASCII 48) $foo += 2; // $foo теперь целое число (2) $foo = $foo + 1.3; // $foo теперь число с плавающей точкой (3.3) $foo = 5 + "10 Little Piggies"; // $foo это целое число (15) $foo = 5 + "10 Small Pigs"; // $foo это целое число (15)

Если последние два примера вам непонятны, смотрите Преобразование строк в числа.

Читайте также:  Htaccess редирект без html

Если вы хотите, чтобы переменная принудительно вычислялась как определенный тип, смотрите раздел приведение типов. Если вы хотите изменить тип переменной, смотрите settype().

Если вы хотите протестировать любой из примеров, приведенных в данном разделе, вы можете использовать функцию var_dump().

Замечание: Поведение автоматического преобразования в массив в настоящий момент не определено.

$a = "1"; // $a это строка $a[0] = "f"; // А как же смещение строки? Что произойдет?

Поскольку PHP поддерживает индексирование в строках с использованием такого же синтаксиса, как и при индексировании массива, вышеприведенный пример приводит к проблеме: следует ли $a стать массивом, первым элементом которого будет «f» или «f» должна стать первым символом строки $a?

Текущая версия PHP воспринимает второе присваивание как определение смещения строки, поэтому $a станет «f», результат же этого автоматического преобразования следует, однако, рассматривать как неопределенный. В PHP 4 для доступа к символам строки был введен новый синтаксис фигурных скобок, используйте этот синтаксис вместо вышеприведенного:

$a = "abc"; // $a это строка $a = "f"; // $a теперь содержит "afc"

Для дополнительной информации смотрите раздел Доступ к символу в строке.

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

Приведение типов в PHP работает так же, как и в C: имя требуемого типа записывается в круглых скобках перед приводимой переменной.

$foo = 10; // $foo это целое число $bar = (boolean) $foo; // $bar это булев тип
    Допускаются следующие приведения типов:
  • (int), (integer) — приведение к целому числу
  • (bool), (boolean) — приведение к булеву типу
  • (float), (double), (real) — приведение к числу с плавающей точкой (float)
  • (string) — приведение к строке
  • (array) — приведение к массиву
  • (object) — приведение к объекту
$foo = (int) $bar; $foo = ( int ) $bar;
$foo = 10; // $foo это целое число $str = "$foo"; // $str это строка $fst = (string) $foo; // $fst это также строка // Это напечатает "они одинаковы" if ($fst === $str)

Источник

Манипуляции с типами

PHP не требует (и не поддерживает) явного типа при определении переменной; тип переменной определяется по контексту, в котором она используется. То есть, если вы присвоите значение типа string переменной $var , то $var станет строкой. Если вы затем присвоите $var целочисленное значение, она станет целым числом.

Примером автоматического преобразования типа является оператор сложения ‘+’. Если какой-либо из операндов является float , то все операнды интерпретируются как float , и результатом также будет float . В противном случае операнды будут интерпретироваться как целые числа и результат также будет целочисленным. Обратите внимание, что это НЕ меняет типы самих операндов; меняется только то, как они вычисляются и сам тип выражения.

$foo = «0» ; // $foo это строка (ASCII 48)
$foo += 2 ; // $foo теперь целое число (2)
$foo = $foo + 1.3 ; // $foo теперь число с плавающей точкой (3.3)
$foo = 5 + «10 Little Piggies» ; // $foo это целое число (15)
$foo = 5 + «10 Small Pigs» ; // $foo это целое число (15)
?>

Если последние два примера вам непонятны, смотрите Преобразование строк в числа.

Читайте также:  Simulate button click javascript

Если вы хотите, чтобы переменная принудительно вычислялась как определенный тип, смотрите раздел приведение типов. Если вы хотите изменить тип переменной, смотрите settype() .

Если вы хотите протестировать любой из примеров, приведенных в данном разделе, вы можете использовать функцию var_dump() .

Замечание:

Поведение автоматического преобразования в массив в настоящий момент не определено.

К тому же, так как PHP поддерживает индексирование в строках аналогично смещениям элементов массивов, следующий пример будет верен для всех версий PHP:

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

Приведение типов в PHP работает так же, как и в C: имя требуемого типа записывается в круглых скобках перед приводимой переменной.

Допускаются следующие приведения типов:

  • (int), (integer) — приведение к integer
  • (bool), (boolean) — приведение к boolean
  • (float), (double), (real) — приведение к float
  • (string) — приведение к string
  • (array) — приведение к array
  • (object) — приведение к object
  • (unset) — приведение к NULL (PHP 5)

Приведение типа (binary) и поддержка префикса b были добавлены в PHP 5.2.1

Обратите внимание, что внутри скобок допускаются пробелы и символы табуляции, поэтому следующие примеры равносильны по своему действию:

Приведение строковых литералов и переменных к бинарным строкам:

Замечание:

Вместо использования приведения переменной к string , можно также заключить ее в двойные кавычки.

$foo = 10 ; // $foo — это целое число
$str = » $foo » ; // $str — это строка
$fst = (string) $foo ; // $fst — это тоже строка

// Это напечатает «они одинаковы»
if ( $fst === $str ) echo «они одинаковы» ;
>
?>

Может быть не совсем ясно, что именно происходит при приведении между типами. Для дополнительной информации смотрите разделы:

Источник

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

PHP — язык с динамической типизацией. Это значит, что тип переменной можно изменить в любой момент работы скрипта. В некоторых других языках типизация строгая, т.е. переменная может менять значение, но не тип.

Динамическая типизация — это удобная штука, но её следствие — неочевидность при работе с переменными разных типов. Рассмотрим пример:

Результатом работы скрипта будет 22 . Странно, да? Не менее странно, чем этот код, который почему-то возвращает true:

Дело в том, что некоторые функции и операторы перед началом вычислений автоматически приводят значения к определённым типам. Например:

Итак, если мы умножаем целое число на дробное, то в результате мы получим дробное число, даже если у результата нет дробной части.

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

Вы можете в любой момент привести переменную к другому типу:

Арифметические операции со строками

Когда мы пытаемся совершить арифметическую операцию со строкой, PHP сначала приводит строку к числу.

И делает он это не совсем очевидным образом: число будет получено из первых числовых символов. Как только будет встречен первый нечисловой символ — остальная строка отбросится:

Приведение к булеву типу

Когда вы пытаетесь привести значение к булеву типу, следующие значения приведутся к false:

  • 0 (целое или дробное)
  • » (пустая строка)
  • ‘0’ (строка с числом 0)
  • [] (пустой массив)
  • null

Все остальные значения приводятся к true.

Источник

Оцените статью