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

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

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

<?php
$foo 
"1";  // $foo - это строка (ASCII-код 49)
$foo *= 2;   // $foo теперь целое число (2)
$foo $foo 1.3;  // $foo теперь число с плавающей точкой (2.6)
$foo "10 Little Piggies"// $foo - это целое число (50)
$foo "10 Small Pigs";     // $foo - это целое число (50)
?>

Если последние два приведенных выше примера кажутся странными, посмотрите, как строки, содержащие числа преобразуются в целые числа.

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

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

Замечание:

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

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

<?php
$a    
'car'// $a - это строка
$a[0] = 'b';   // $a все еще строка
echo $a;       // bar
?>

Более подробно смотрите в разделе Доступ к символу в строке.

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

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

<?php
$foo 
10;   // $foo - это целое число
$bar = (boolean) $foo;   // $bar - это булев тип
?>

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

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

Приведение типа (binary) и поддержка префикса b существует для прямой поддержки. Обратите внимание, что (binary) по существу то же самое, что и (string), но не следует полагаться на этот тип приведения.

Приведение типа (unset) объявлено устаревшим с PHP 7.2.0. Обратите внимание, что приведение типа (unset) это то же самое, что присвоение NULL переменной. Тип приведения (unset) удален в PHP 8.0.0.

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

<?php
$foo 
= (int) $bar;
$foo = ( int ) $bar;
?>

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

<?php
$binary 
= (binary) $string;
$binary b"binary string";
?>

Замечание:

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

<?php
$foo 
10;            // $foo - это целое число
$str "$foo";        // $str - это строка
$fst = (string) $foo// $fst - это тоже строка

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

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