PHP не требует (и не поддерживает) явного определения типа при
объявлении переменной; тип переменной определяется по контексту, в
котором она используется. То есть, если вы присвоите строковое
значение переменной $var,
$var станет строкой. Если вы затем
присвоите $var целочисленное значение, она
станет целым числом.
Примером автоматического преобразования типа является оператор
сложения '+'. Если любой из операндов является числом с плавающей
точкой, то все операнды интерпретируются как числа с плавающей
точкой, результатом будет также число с плавающей точкой. В
противном случае операнды будут интерпретироваться как целые числа
и результат также будет целочисленным. Обратите внимание, что это
НЕ меняет типы самих операндов; меняется только то, как они
вычисляются.
<?php $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().
Замечание:
Поведение автоматического преобразования в массив в настоящий
момент не определено.
<?php $a = "1"; // $a это строка $a[0] = "f"; // А как же смещение строки? Что произойдет? ?>
|
Поскольку PHP (по историческим причинам) поддерживает
индексирование в строках с использованием такого же синтаксиса,
как и при индексировании массива, вышеприведенный пример приводит
к проблеме: следует ли $a стать массивом, первым элементом
которого будет "f" или "f" должна стать первым символом строки $a?
Текущая версия PHP воспринимает второе присваивание как
определение смещения строки, поэтому $a станет "f", результат же
этого автоматического преобразования следует, однако, рассматривать
как неопределенный. В PHP 4 для доступа к символам строки был
введен новый синтаксис фигурных скобок, используйте этот синтаксис
вместо вышеприведенного:
<?php $a = "abc"; // $a это строка $a{1} = "f"; // $a теперь содержит "afc" ?>
|
Для дополнительной информации смотрите раздел
Доступ к символу в
строке.
Приведение типов в PHP работает так же, как и в C: имя требуемого
типа записывается в круглых скобках перед приводимой переменной.
<?php $foo = 10; // $foo это целое число $bar = (boolean) $foo; // $bar это булев тип ?>
|
Допускаются следующие приведения типов:
(int), (integer) - приведение к целому числу
(bool), (boolean) - приведение к булеву типу
(float), (double), (real) - приведение к числу с плавающей точкой (float)
(string) - приведение к строке
(array) - приведение к массиву
(object) - приведение к объекту
Обратите внимание, что внутри скобок допускаются пробелы и
символы табуляции, поэтому следующее равносильно по своему
действию:
<?php $foo = (int) $bar; $foo = ( int ) $bar; ?>
|
Замечание:
Вместо приведения переменной к строке, вы можете заключить ее в
двойные кавычки.
<?php $foo = 10; // $foo это целое число $str = "$foo"; // $str это строка $fst = (string) $foo; // $fst это также строка
// Это напечатает "они одинаковы" if ($fst === $str) { echo "они одинаковы"; } ?>
|
Возможно, вам не совсем ясно, что происходит при приведении
между типами. Для дополнительной информации смотрите разделы: