- PHP: Приведение типов
- Приведение к целому числу
- Приведение к числу с плавающей точкой
- Приведение к булеву типу
- Приведение к строке
- Приведение к NULL
- Манипуляции с типами
- Приведение типов
- Манипуляции с типами
- Приведение типов
- Приведение типов в PHP
- Приведение типов в 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 .
Приведение к булеву типу
Следующие значения в результате преобразования дают значение 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)
Если последние два примера вам непонятны, смотрите Преобразование строк в числа.
Если вы хотите, чтобы переменная принудительно вычислялась как определенный тип, смотрите раздел приведение типов. Если вы хотите изменить тип переменной, смотрите 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)
?>?php
Если последние два примера вам непонятны, смотрите Преобразование строк в числа.
Если вы хотите, чтобы переменная принудительно вычислялась как определенный тип, смотрите раздел приведение типов. Если вы хотите изменить тип переменной, смотрите 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 — это тоже строка
?php
// Это напечатает «они одинаковы»
if ( $fst === $str ) echo «они одинаковы» ;
>
?>
Может быть не совсем ясно, что именно происходит при приведении между типами. Для дополнительной информации смотрите разделы:
Приведение типов в PHP
PHP — язык с динамической типизацией. Это значит, что тип переменной можно изменить в любой момент работы скрипта. В некоторых других языках типизация строгая, т.е. переменная может менять значение, но не тип.
Динамическая типизация — это удобная штука, но её следствие — неочевидность при работе с переменными разных типов. Рассмотрим пример:
Результатом работы скрипта будет 22 . Странно, да? Не менее странно, чем этот код, который почему-то возвращает true:
Дело в том, что некоторые функции и операторы перед началом вычислений автоматически приводят значения к определённым типам. Например:
Итак, если мы умножаем целое число на дробное, то в результате мы получим дробное число, даже если у результата нет дробной части.
Приведение типов в PHP
Вы можете в любой момент привести переменную к другому типу:
Арифметические операции со строками
Когда мы пытаемся совершить арифметическую операцию со строкой, PHP сначала приводит строку к числу.
И делает он это не совсем очевидным образом: число будет получено из первых числовых символов. Как только будет встречен первый нечисловой символ — остальная строка отбросится:
Приведение к булеву типу
Когда вы пытаетесь привести значение к булеву типу, следующие значения приведутся к false:
- 0 (целое или дробное)
- » (пустая строка)
- ‘0’ (строка с числом 0)
- [] (пустой массив)
- null
Все остальные значения приводятся к true.