PHP не требует (и не поддерживает) явного определения типа при объявлении
переменной; тип переменной определяется по контексту, в котором она
используется. То есть, если вы присваиваете строковое значение переменной var,
var становится строкой. Если вы затем присваиваете переменной var
целочисленное значение, она становится целым числом.
Примером автоматической конвертации в PHP является операция сложения ’+’.
Если любой из операндов float, то все операнды вычисляются как float, и результат также будет
float. Если же операнды интерпретируются как целые числа, то и результат будет целочисленным.
Обратите внимание, что при этом НЕ изменяются типы самих операндов; это
делается только на этапе вычисления операндов.
$foo = "0"; // $foo это строка (ASCII 48)
$foo += 2; // теперь $foo это integer (2)
$foo = $foo + 1.3; // теперь $foo это float (3.3)
$foo = 5 + "10 Little Piggies"; // $foo это integer (15)
$foo = 5 + "10 Small Pigs"; // $foo это integer (15)
Если вы хотите форсировать вычисление переменной как имеющей определённый тип,
см. раздел Приведение типов. Если вы хотите изменить тип переменной, см.
settype().
Если вы хотите протестировать любой из примеров этого раздела, вы можете использовать функцию
var_dump().
Примечание:
поведение автоматической конвертации для массива в настоящее время не определено.
$a = 1; // $a это integer
$a[0] = "f"; // $a становится массивом, а $a[0] содержит "f"
Предыдущий пример кажется похожим на следующий, делая
$a массивом, первый элемент которого содержит ’f’. Теперь рассмотрим:
$a = "1"; // $a это string
$a[0] = "f"; // Что будет со смещением строки? Что произойдёт?
Поскольку PHP поддерживает индексирование в строках через смещение с
использованием того же синтаксиса, что и при индексировании массива,
вышеприведённый пример создаст проблему: должна ли $a становиться массивом с первым элементом
"f", или "f" должен стать первым символом строки $a?
Исходя из этого, как указано в PHP 3.0.12 и PHP 4.0b3-RC4, результат этой
автоматической конвертации рассматривается как неопределённый/undefined. Пути разрешения, однако, обсуждаются.
При приведении или форсировании конвертации из массива в строку, результатом станет слово
Array. При приведении или форсировании конвертации из объекта в строку, результатом
станет слово Object.
При приведении скалярной или строковой переменной к массиву, переменная
станет первым элементом этого массива: