此外,该函数返回闭包的正确类型,与 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
(PHP 8)
get_debug_type — 以适合调试的方式获取变量的类型名称
返回 PHP 变量 value
的解析名称。此函数将解析对象到其类名,资源到其资源类型名称,以及标量值到其在类型声明中使用的通用名称。
此函数与 gettype() 的区别在于,它返回与实际使用更一致的类型名称,而不是那些出于历史原因而存在的名称。
value
正在进行类型检查的变量。
返回字符串的可能值是
类型 + 状态 | 返回值 | 注释 |
---|---|---|
null |
"null"
|
- |
布尔值 (true 或 false) |
"bool"
|
- |
整数 |
"int"
|
- |
浮点数 |
"float"
|
- |
字符串 |
"string"
|
- |
数组 |
"array"
|
- |
资源 |
"resource (resourcename)"
|
- |
资源 (已关闭) |
"resource (closed)"
|
示例:使用 fclose 关闭文件流后。 |
来自命名类的对象 | 类的完整名称,包括其命名空间,例如 Foo\Bar |
- |
来自匿名类的对象 |
"class@anonymous"
|
匿名类是通过 $x = new class { ... } 语法创建的。 |
示例 #1 get_debug_type() 示例
<?php
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;
?>
上面的示例将输出类似于
null bool int float string array resource (stream) resource (closed) stdClass class@anonymous
此外,该函数返回闭包的正确类型,与 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