在PHP开发过程中,我们经常会定义许多常量来维护代码的可读性和可维护性。比如系统级配置、错误码、权限标识等。随着项目规模的扩大,常量数量逐渐增多,我们有时需要从所有定义的常量中筛选出某一类特定用途的常量。这个时候,get_defined_constants() 和 array_filter() 这两个函数就派上了用场。
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() 是另一个强大的工具,用于对数组中的每个元素应用回调函数,并筛选出符合条件的元素。回调函数返回 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 并提交到一个远程接口(比如日志系统或配置中心)。例如,发送到 https://m66.net/api/report_constants:
相关标签:
array_filter