在PHP中,get_defined_constants() 是一个非常实用的函数,它可以用来获取当前脚本中所有已定义的常量。当我们在调试或者想了解运行环境中的常量状态时,这个函数尤其有用。
这个函数可以接受一个布尔型参数:categorize。当你调用 get_defined_constants(true) 与 get_defined_constants(false) 时,返回结果是不同的。理解它们的区别,有助于我们更好地使用这个函数进行调试或分析。
当你调用 get_defined_constants(false)(或直接调用不传参数),返回的是一个一维数组,键名是常量的名称,键值是对应的值。例如:
print_r(get_defined_constants(false));
可能的输出:
Array
(
[E_ERROR] => 1
[E_WARNING] => 2
[E_PARSE] => 4
...
)
这是所有当前定义的常量,不分组,直接以常量名称为键名输出。这种模式更直观简洁,适合快速查看有哪些常量存在以及它们的值。
当你调用 get_defined_constants(true) 时,返回的是一个二维数组,也就是这些常量会按“模块”进行分类分组。常见的分组包括 Core、pcre、date、user 等。这个模式更适合需要分类管理常量的场景。
例如:
print_r(get_defined_constants(true));
输出可能类似:
Array
(
[Core] => Array
(
[E_ERROR] => 1
[E_WARNING] => 2
...
)
[pcre] => Array
(
[PREG_PATTERN_ORDER] => 1
...
)
[user] => Array
(
[MY_CONSTANT] => 123
)
)
这种结构能更清晰地知道常量的来源,有助于分析哪些是PHP核心定义的,哪些是扩展提供的,哪些是用户自定义的。
使用方式 | 返回结构 | 适合用途 |
---|---|---|
get_defined_constants(false) | 一维数组 | 简单调试,快速遍历 |
get_defined_constants(true) | 二维数组(分类) | 深度分析,区分来源 |
如果你只想获取用户自定义的常量(非PHP核心或扩展定义),使用 get_defined_constants(true)['user'] 是一种非常简洁的方式:
define('SITE_NAME', 'MySite');
define('SITE_URL', 'https://m66.net');
$userConstants = get_defined_constants(true)['user'];
print_r($userConstants);
输出结果:
Array
(
[SITE_NAME] => MySite
[SITE_URL] => https://m66.net
)
这在大型项目中尤其有用,可以帮助你快速检查是否所有预期的自定义常量都已定义。
get_defined_constants() 是PHP中非常有价值的工具函数之一。当你需要一个平铺的常量列表时,使用 false 或不传参数即可;当你需要更细致的常量来源分类时,使用 true 是更好的选择。掌握这两个用法的区别,可以在开发调试中更高效地使用常量信息。