PHP Conference Japan 2024

get_debug_type

(PHP 8)

get_debug_type以适合调试的方式获取变量的类型名称

描述

get_debug_type(混合 $value): 字符串

返回 PHP 变量 value 的解析名称。此函数会将对象解析为其类名,将资源解析为其资源类型名称,并将标量值解析为其常用名称,如类型声明中所用。

此函数与 gettype() 不同,因为它返回的类型名称与实际用法更加一致,而不是出于历史原因而存在的类型名称。

参数

value

正在进行类型检查的变量。

返回值

返回的 字符串 的可能值为

类型 + 状态 返回值 备注
null "null" -
布尔值 (truefalse) "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

命名空间 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;

接口
A {}
接口
B {}
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

参见

添加注释

用户贡献的注释 1 条注释

5
vyacheslav dot belchuk at gmail dot com
1 年前
此外,该函数返回 Closure 的正确类型,而 gettype() 则不会。

<?php

echo get_debug_type(function () {}) . PHP_EOL;
echo
get_debug_type(fn () => '') . PHP_EOL . PHP_EOL;

echo
gettype(function () {}) . PHP_EOL;
echo
gettype(fn () => '');

?>

输出

Closure
Closure

object
object
To Top