在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是更好的選擇。掌握這兩個用法的區別,可以在開發調試中更高效地使用常量信息。