当前位置: 首页> 最新文章列表> get_defined_constants(true) 与 get_defined_constants(false) 的区别

get_defined_constants(true) 与 get_defined_constants(false) 的区别

M66 2025-05-28

在PHP中,get_defined_constants() 是一个非常实用的函数,它可以用来获取当前脚本中所有已定义的常量。当我们在调试或者想了解运行环境中的常量状态时,这个函数尤其有用。

这个函数可以接受一个布尔型参数:categorize。当你调用 get_defined_constants(true)get_defined_constants(false) 时,返回结果是不同的。理解它们的区别,有助于我们更好地使用这个函数进行调试或分析。

1. get_defined_constants(false) 的返回结果

当你调用 get_defined_constants(false)(或直接调用不传参数),返回的是一个一维数组,键名是常量的名称,键值是对应的值。例如:

print_r(get_defined_constants(false));

可能的输出:

Array
(
    [E_ERROR] => 1
    [E_WARNING] => 2
    [E_PARSE] => 4
    ...
)

这是所有当前定义的常量,不分组,直接以常量名称为键名输出。这种模式更直观简洁,适合快速查看有哪些常量存在以及它们的值。

2. get_defined_constants(true) 的返回结果

当你调用 get_defined_constants(true) 时,返回的是一个二维数组,也就是这些常量会按“模块”进行分类分组。常见的分组包括 Corepcredateuser 等。这个模式更适合需要分类管理常量的场景。

例如:

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核心定义的,哪些是扩展提供的,哪些是用户自定义的。

3. 适用场景比较

使用方式返回结构适合用途
get_defined_constants(false)一维数组简单调试,快速遍历
get_defined_constants(true)二维数组(分类)深度分析,区分来源

4. 示例:筛选用户自定义常量

如果你只想获取用户自定义的常量(非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 是更好的选择。掌握这两个用法的区别,可以在开发调试中更高效地使用常量信息。