当前位置: 首页> 最新文章列表> 如何使用get_defined_constants()和array_filter()函数筛选特定常量?

如何使用get_defined_constants()和array_filter()函数筛选特定常量?

M66 2025-06-27

在PHP开发过程中,我们经常会定义许多常量来维护代码的可读性和可维护性。比如系统级配置、错误码、权限标识等。随着项目规模的扩大,常量数量逐渐增多,我们有时需要从所有定义的常量中筛选出某一类特定用途的常量。这个时候,get_defined_constants()array_filter() 这两个函数就派上了用场。

get_defined_constants()简介

get_defined_constants() 是一个内置函数,用来获取当前脚本中所有已定义的常量。该函数返回一个多维关联数组,默认以常量所属的分类(如 Core, user, date 等)进行分组。

使用示例:

print_r(get_defined_constants());

输出(部分):

Array
(
    [Core] => Array
        (
            [E_ERROR] => 1
            [E_WARNING] => 2
        )
    [user] => Array
        (
            [MY_APP_ENV] => 'production'
        )
)

如果传入参数 true,会返回按分类分组的常量;如果为 false 或省略,则返回一个扁平化的关联数组。

array_filter()简介

array_filter() 是另一个强大的工具,用于对数组中的每个元素应用回调函数,并筛选出符合条件的元素。回调函数返回 true 的元素会被保留。

基本用法如下:

$filtered = array_filter($array, function($value) {
    return $value > 10;
});

实战:筛选自定义常量

假设我们在代码中定义了一些以 APP_ 开头的常量,用于标识应用配置:

define('APP_NAME', 'MyApp');
define('APP_ENV', 'production');
define('APP_DEBUG', true);
define('VERSION', '1.0.0');

我们希望筛选出所有以 APP_ 开头的常量。可以结合 get_defined_constants()array_filter() 实现如下:

$allConstants = get_defined_constants(true);
$userConstants = $allConstants['user'] ?? [];

$appConstants = array_filter($userConstants, function($key) {
    return strpos($key, 'APP_') === 0;
}, ARRAY_FILTER_USE_KEY);

print_r($appConstants);

输出结果:

Array
(
    [APP_NAME] => MyApp
    [APP_ENV] => production
    [APP_DEBUG] => 1
)

这样,我们就精准地提取出了所有以 APP_ 开头的自定义常量,方便后续处理,如配置导出、调试打印等。

实战拓展:将结果转为JSON并发送到接口

我们还可以将筛选出的常量转换成 JSON 并提交到一个远程接口(比如日志系统或配置中心)。例如,发送到 https://m66.net/api/report_constants