(PHP 8)
get_debug_type — Получает название типа переменной так, чтобы значение лучше соответствовало целям отладки
Функция разрешает значение PHP-переменной value
и возвращает название типа значения.
Функция разрешает объекты в название класса, ресурсы — в название типа
ресурса, а скалярные значения — в общепринятое название типа данных,
которое указывают в объявлениях типов.
Отличие функции от функции gettype() состоит в том, что она возвращает названия типов, которые согласуются с практикой отладки лучше, чем те, которые остаются в языке по историческим причинам.
value
Переменная, тип которой проверяется.
Функция возвращает строку (string) со значением из следующего списка:
Тип + состояние | Значение возврата | Примечания |
---|---|---|
null |
"null"
|
- |
Логические значения: true или false |
"bool"
|
- |
Целые числа |
"int"
|
- |
Числа с плавающей точкой |
"float"
|
- |
Строки |
"string"
|
- |
Массивы |
"array"
|
- |
Ресурсы |
"resource (resourcename)"
|
- |
Закрытые ресурсы |
"resource (closed)"
|
Пример: файловый поток после закрытия функцией fclose() |
Объекты именованных классов |
Полное имя класса с пространством имён, например
Foo\Bar
|
- |
Объекты анонимных классов |
"class@anonymous" , название родительского класса, если класс расширяет класс,
или название интерфейса, если класс реализует интерфейс, например "Foo\Bar@anonymous"
|
Анонимные классы — классы, которые создали синтаксисом
$x = new class { ... }
|
Пример #1 Пример получения названия типа переменной функцией get_debug_type()
<?php
namespace Foo;
echo get_debug_type(null), PHP_EOL;
echo get_debug_type(true), PHP_EOL;
echo get_debug_type(1), PHP_EOL;
echo get_debug_type(0.1), PHP_EOL;
echo get_debug_type("foo"), PHP_EOL;
echo get_debug_type([]), PHP_EOL;
$fp = fopen(__FILE__, 'rb');
echo get_debug_type($fp), PHP_EOL;
fclose($fp);
echo get_debug_type($fp), PHP_EOL;
echo get_debug_type(new \stdClass), PHP_EOL;
echo get_debug_type(new class {}), PHP_EOL;
interface A {}
interface B {}
class C {}
echo get_debug_type(new class implements A {}), PHP_EOL;
echo get_debug_type(new class implements A,B {}), PHP_EOL;
echo get_debug_type(new class extends C {}), PHP_EOL;
echo get_debug_type(new class extends C implements A {}), PHP_EOL;
?>
Вывод приведённого примера будет похож на:
null bool int float string array resource (stream) resource (closed) stdClass class@anonymous Foo\A@anonymous Foo\A@anonymous Foo\C@anonymous Foo\C@anonymous