- PHP: Приведение типов
- Приведение к целому числу
- Приведение к числу с плавающей точкой
- Приведение к булеву типу
- Приведение к строке
- Приведение к NULL
- Трюки с типами
- Приведение типов
- FPublisher
- Web-технологии: База знаний
- Документация PHP
- Манипуляции с типами
- Приведение типов
- PHP :: Манипуляции с типами
- Приведение типов в PHP
- Приведение к типу bool
- Приведение к типу integer
- Приведение к типу float
- Приведение к типу string
- Приведение к типу array
- Приведение к типу NULL
- Примеры приведения типов
- Явное приведение типов php
PHP: Приведение типов
Приведение типа — это преобразование значения одного типа в значение другого типа.
Есть два вида приведения типов:
Неявное приведение типа выполняется интерпретатором автоматически, без непосредственного участия программиста. Например, значение будет автоматически преобразовано, если оператор ожидает, числовые операнды:
Чтобы выполнить явное приведение, нужно указать в круглых скобках имя требуемого типа непосредственно перед приводимым значением или переменной:
Запись имени типа в круглых скобках называется оператором приведения типа. Допускаются следующие операторы приведения типов:
Приведение к целому числу
Строки преобразуются по следующим правилам:
Для других типов поведение преобразования в integer не определено. Поэтому не нужно полагаться на любое наблюдаемое поведение, так как оно может измениться без предупреждения.
Приведение к числу с плавающей точкой
Строки преобразуются по следующим правилам:
Приведение к булеву типу
Следующие значения в результате преобразования дают значение FALSE :
Приведение к строке
Булево значение TRUE преобразуется в строку «1», а значение FALSE преобразуется в «» (пустую строку):
Целое число или число с плавающей точкой преобразуется в строку, состоящую из цифр числа:
Массивы всегда преобразуются в строку «Array» :
NULL всегда преобразуется в пустую строку:
Для преобразования объекта в строку, объект должен иметь метод __toString() :
Приведение к NULL
Приведение к типу NULL не удаляет переменную и её значение, а лишь возвращает значение типа NULL :
Трюки с типами
PHP не требует (и не поддерживает) явного определения типа при объявлении переменной; тип переменной определяется по контексту, в котором она используется. То есть, если вы присваиваете строковое значение переменной var, var становится строкой. Если вы затем присваиваете переменной var целочисленное значение, она становится целым числом.
Примером автоматической конвертации в PHP является операция сложения ‘+’. Если любой из операндов float, то все операнды вычисляются как float, и результат также будет float. Если же операнды интерпретируются как целые числа, то и результат будет целочисленным.
Обратите внимание, что при этом НЕ изменяются типы самих операндов; это делается только на этапе вычисления операндов.
Если последние два примера непонятны, см. Конвертация строк.
Если вы хотите форсировать вычисление переменной как имеющей определённый тип, см. раздел Приведение типов. Если вы хотите изменить тип переменной, см. settype().
Если вы хотите протестировать любой из примеров этого раздела, вы можете использовать функцию var_dump().
Примечание: Поведение автоматической конвертации для массива в настоящее время не определено.
Исходя из этого, как указано в PHP 3.0.12 и PHP 4.0b3-RC4, результат этой автоматической конвертации рассматривается как неопределённый/undefined. Пути разрешения, однако, обсуждаются.
Приведение типов
Приведение типов в PHP работает так же, как и в C: имя нужного типа записывается в скобках перед переменной, которая к этому новому типу приводится.
Допускаются следующие приведения типов:
Примечание: Вместо приведения переменной к строке, вы можете также заключить переменную в двойные кавычки.
Заметьте, что табуляции и пробелы допускаются внутри скобок, поэтому следующие варианты функционально эквивалентны:
Возможно, сейчас не очевидно, что происходит при приведении конкретных типов.
При приведении или форсировании конвертации из массива в строку, результатом станет слово Array. При приведении или форсировании конвертации из объекта в строку, результатом станет слово Object.
При приведении скалярной или строковой переменной к массиву, переменная станет первым элементом этого массива:
При приведении скалярной или строковой переменной к объекту, переменная станет атрибутом этого объекта; имя атрибута будет ‘scalar’:
FPublisher
Web-технологии: База знаний
Документация PHP
Манипуляции с типами
Примером автоматического преобразования типа является оператор сложения ‘+’. Если любой из операндов является числом с плавающей точкой, то все операнды интерпретируются как числа с плавающей точкой, результатом будет также число с плавающей точкой. В противном случае операнды будут интерпретироваться как целые числа и результат также будет целочисленным. Обратите внимание, что это НЕ меняет типы самих операндов; меняется только то, как они вычисляются.
Если последние два примера вам непонятны, смотрите Преобразование строк в числа.
Если вы хотите, чтобы переменная принудительно вычислялась как определенный тип, смотрите раздел приведение типов. Если вы хотите изменить тип переменной, смотрите settype().
Если вы хотите протестировать любой из примеров, приведенных в данном разделе, вы можете использовать функцию var_dump().
Замечание: Поведение автоматического преобразования в массив в настоящий момент не определено.
Для дополнительной информации смотрите раздел Доступ к символу в строке.
Приведение типов
Приведение типов в PHP работает так же, как и в C: имя требуемого типа записывается в круглых скобках перед приводимой переменной.
Обратите внимание, что внутри скобок допускаются пробелы и символы табуляции, поэтому следующее равносильно по своему действию:
Замечание: Вместо приведения переменной к строке, вы можете заключить ее в двойные кавычки.
PHP :: Манипуляции с типами
Приведение типов в PHP
Поскольку PHP относится к языкам программирования с нестрогой типизацией данных, довольно часто получается так, что интерпретатор ожидает получить данные одного типа, а вместо этого получает данные другого типа. В таких случаях он просто осуществляет преобразование полученных данных к нужному типу.
называется процесс преобразования значения одного типа в значение другого типа.
В ходе приведения типов, во избежание непредвиденных результатов, следует знать правила, по которым происходит преобразование данных одного типа в другой. Перечислим их, после чего рассмотрим пример кода, содержащего данные преобразования типов.
Приведение к типу bool
Во время преобразования к типу bool следующие значения рассматриваются как FALSE :
Приведение к типу integer
В случае привидения к типу integer :
Для других типов данных приведение к целочисленному типу не определено, поэтому не стоит доверять текущему наблюдаемому поведению, так как оно может измениться без предупреждения.
Приведение к типу float
В случае привидения к типу float для всех типов, за исключением строк, сперва будет совершено преобразование в целочисленный тип, а уже потом целое число будет преобразовано в вещественное. Что касается строк, то:
Приведение к типу string
В случае преобразования значений в строки (т.е. приведение к типу string ):
Приведение к типу array
Приведение к типу NULL
Примеры приведения типов
Явное приведение типов php
Casting objects to arrays is a pain. Example:
$test = new MyClass ();
echo ‘
/*
Array
(
[MyClasspriv] => priv_value
[*prot] => prot_value
[pub] => pub_value
[MyClasspriv] => second_pub_value
)
*/
?>
Yes, that looks like an array with two keys with the same name and it looks like the protected field was prepended with an asterisk. But that’s not true:
/*
MyClasspriv (13) => priv_value
0 77 121 67 108 97 115 115 0 112 114 105 118
*prot (7) => prot_value
0 42 0 112 114 111 116
pub (3) => pub_value
112 117 98
MyClasspriv (11) => second_pub_value
77 121 67 108 97 115 115 112 114 105 118
*/
?>
The char codes show that the protected keys are prepended with ‘\0*\0’ and private keys are prepended with ‘\0’.__CLASS__.’\0′ so be careful when playing around with this.
The object casting methods presented here do not take into account the class hierarchy of the class you’re trying to cast your object into.
Value of uninitialized variable of different data types.
settype($a,’bool’);
var_dump($a); //boolean false
settype($b,’string’);
var_dump($b); //string » (length=0)
settype($c,’array’);
var_dump($c); //array (size=0) empty
settype($d,’int’);
var_dump($d); //int 0
settype($e,’float’);
var_dump($e); //float 0
You REALLY must be aware what you are doing, when you cast a lot in your code. For example, you can accidentaly change FALSE to TRUE (probably not in one line, like here):
if(TRUE === (boolean) (array) (int) FALSE) <
kaboom();
>
namaroulis stated «I found it tricky to check if a posted value was an integer»; to test if a variable is a number or a numeric string (such as form input, which is always a string), you must use is_numeric():
in response to bhsmither at gmail.com
It raises a warning because of the bad enquoted variable
It seems (unset) is pretty useless. But for people who like to make their code really compact (and probably unreadable). You can use it to use an variable and unset it on the same line:
?>
With the unset cast:
?>
Hoorah, we lost another line!
Checking for strings to be integers?
How about if a string is a float?
/* When checking for floats, we assume the possibility of no decimals needed. If you MUST require decimals (forcing the user to type 7.0 for example) replace the sequence:
2+(\.5+)?
with
7+\.5+
*/