gettype()
Функция gettype() в PHP возвращает тип переданной переменной в виде строки. Узнайте синтаксис, возвращаемые значения и особенности использования.
Введение
PHP — язык с динамической типизацией: тип переменной определяется во время выполнения, а не объявляется заранее. Встроенная функция gettype() позволяет узнать этот тип во время выполнения, возвращая человекочитаемую строку, например "integer" или "string". Она удобна при отладке неожиданных значений, ветвлении по типу смешанного ввода или формировании сообщений журнала, описывающих фактически полученное значение.
На этой странице рассматриваются синтаксис функции, точные строки, которые она может вернуть, особенности устаревших имён типов, вызывающие путаницу, и случаи, когда стоит использовать gettype() вместо специализированных функций is_*.
Синтаксис
gettype(mixed $value): stringgettype() принимает один аргумент, $value — переменную, тип которой нужно узнать, — и возвращает строку с названием этого типа. Функция никогда не выбрасывает исключений и не изменяет свой аргумент.
Возвращаемые значения
gettype() возвращает одну из фиксированного набора строк:
| Возвращаемая строка | Тип PHP |
|---|---|
"boolean" | bool (true / false) |
"integer" | int |
"double" | float (да, double, а не "float" — см. особенность ниже) |
"string" | string |
"array" | array |
"object" | любой экземпляр объекта |
"resource" | открытый ресурс (например, дескриптор файла) |
"resource (closed)" | закрытый ресурс (PHP 7.2+) |
"NULL" | значение null |
"unknown type" | тип, который PHP не может иначе назвать |
Базовый пример
Пример использования gettype() в PHP
Здесь мы определяем четыре переменные разных типов и вызываем gettype() для каждой из них. Вывод: string, integer, boolean и array — по одному имени типа на строку.
Особенность "double" и "integer"
Строки, возвращаемые gettype(), не совпадают с ключевыми словами, используемыми в объявлениях типов. Тип float отображается как "double", а int — как "integer":
<?php
echo gettype(3.14), "\n"; // double (NOT "float")
echo gettype(7), "\n"; // integer (NOT "int")
echo gettype(null), "\n"; // NULL (uppercase)
?>Из-за этого сравнение результата gettype() со строкой "float" или "int" молча завершается неудачей. Если вам нужен лишь ответ «да/нет» относительно конкретного типа, предпочтительнее использовать специализированные функции — is_int(), is_float(), is_string(), is_array() и аналогичные — они и быстрее, и не содержат сюрпризов с именованием:
<?php
$value = 7;
// Brittle: depends on the legacy name
if (gettype($value) === "integer") { /* ... */ }
// Clearer and faster:
if (is_int($value)) { /* ... */ }
?>В PHP 8.0 и выше современной альтернативой является get_debug_type(): она возвращает канонические имена (int, float, bool), а для объектов — фактическое имя класса вместо просто "object".
Когда использовать gettype()
- Отладка и журналирование — вывод типа значения вместе с его содержимым при поиске ошибки.
- Обобщённая обработка смешанного ввода — ветвление в
switch, когда функция правомерно принимает несколько типов. - Быстрая проверка — разовая проверка в консоли без необходимости знать современные имена типов.
Для полного структурированного вывода значения (его тип и содержимое, рекурсивно) используйте var_dump() или print_r(). Чтобы изменить тип переменной вместо его чтения, обратитесь к settype(). Для общего знакомства с системой типов PHP читайте PHP Data Types.
Заключение
gettype() даёт быстрый ответ в виде строки на вопрос «какой тип у этого значения?» — полезен при отладке, журналировании и обработке смешанного ввода. Просто помните об устаревших именах ("double" для float, "integer" для int) и используйте функции is_* или get_debug_type(), когда нужна точная, перспективная проверка.