Манипуляции с типами
PHP не требует явного определения типа при объявлении переменной.
В этом случае тип переменной определяется значением, которое она хранит.
То есть, если переменной $var присваивается значение типа строка (string), то
$var изменит тип на строку (string).
Если после этого переменной $var будет присвоено значение типа целое число (int), то она изменит тип на целое число (int).
В определённых контекстах PHP может попытаться автоматически преобразовать тип значения в другой. Существуют следующие различные контексты:
-
Числовой контекст
-
Строчный контекст
-
Логический контекст
-
Контекст целых чисел и строк
-
Сравнительный контекст
-
Контекст функций
Замечание:
Когда значение нужно интерпретировать как другой тип, само значение не меняет тип.
Чтобы принудительно установить тип переменной, смотрите раздел Приведение типа.
Чтобы изменить тип переменной, смотрите описание функции settype().
Числовой контекст
Контекст при использовании
арифметического оператора.
В данном контексте, если один из операндов является числом с плавающей точкой (float) (или не интерпретируется как целое число (int)),
оба операнда интерпретируются как число с плавающей точкой (float)
и результатом будет число с плавающей точкой (float).
В противном случае операнды будут интерпретированы как целое число (int)
и результатом также будет целое число (int).
Начиная с PHP 8.0.0, если один из операндов не может быть интерпретирован, выбрасывается ошибка TypeError.
Контекст целых чисел и строк
Контекст при использовании побитовых операторов.
В данном контексте, если у всех операндов тип строка (string), результат также будет строкой (string).
В противном случае операнды будут интерпретированы как целое число (int)
и результат также будет целым числом (int).
Начиная с PHP 8.0.0, если один из операндов не может быть интерпретирован, то будет выброшена ошибка TypeError.
Контекст функций
Контекст, когда значение передаётся типизированному параметру, свойству или возвращается из функции, в которой объявлен тип возвращаемого значения.
В этом контексте, когда активен режим строгой типизации (по умолчанию), только скалярные значения могут быть преобразованы в другое скалярное значение.
Для объявлений простых типов поведение следующее:
-
Объявление типа bool: значение интерпретируется как логическое значение (bool).
Объявление типа int: значение интерпретируется как целое число (int),
если преобразование хорошо определено. Например, строка является
числовой строкой.
Объявление типа float: значение интерпретируется как число с плавающей точкой (float)
если преобразование хорошо определено. Например, строка является
числовой строкой.
Объявление типа string: значение интерпретируется как строка (string).
Если объявление типа является объединённым, смотрите раздел
Приведение для объединённых типов.
Внимание
Внутренние функции
автоматически подставляют null
к скалярным типам,
это поведение УСТАРЕЛО в PHP 8.1.0.
Приведение типов
Приведение типа преобразует значение к выбранному типу,
записывая тип в круглых скобках перед преобразуемым значением.
Допускаются следующие приведения типов:
(int)
- приведение типа к целому числу (int)
(bool)
- приведение типа к логическому значению (bool)
(float)
- приведение типа к числу с плавающей точкой (float)
(string)
- приведение типа к строке (string)
(array)
- приведение типа к массиву (array)
(object)
- приведение типа к объекту (object)
(unset)
- приведение типа к NULL
Замечание:
(integer)
является псевдонимом приведения типа (int)
.
(boolean)
является псевдонимом приведения типа (bool)
.
(binary)
является псевдонимом приведения типа (string)
.
(double)
и (real)
являются псевдонимами приведения типа (float)
.
Эти приведения не используют каноническое имя типа и не рекомендуются.
Внимание
Псевдоним приведения типа (real)
устарел, начиная с PHP 8.0.0.
Внимание
Приведение типа (unset)
устарело, начиная с версии PHP 7.2.0.
Обратите внимание, что приведение (unset)
равносильно присвоению переменной или вызову значения NULL.
Приведение (unset)
удалено в PHP 8.0.0.
Предостережение
Приведение типа (binary)
и префикс b
существуют для прямой поддержки.
В настоящее время (binary)
и (string)
идентичны, однако это может измениться и на это не следует полагаться.
Замечание:
Пробелы игнорируются в круглых скобках при приведении типа.
Таким образом, следующие два приведения типов эквивалентны:
Замечание:
Вместо приведения переменной к типу строка (string) можно также заключить переменную в двойные кавычки.
Может быть неочевидно, что именно произойдёт при преобразовании между определёнными типами.
Для получения дополнительной информации смотрите эти разделы:
Замечание:
Поскольку PHP поддерживает индексацию в строках (string) с помощью смещения, используя тот же синтаксис,
что и индексация в массивах (array), следующий пример справедлив для всех версий PHP:
Дополнительную информацию смотрите в разделе Доступ к символу в строке и его изменение.