當前位置: 首頁> 最新文章列表> 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是更好的選擇。掌握這兩個用法的區別,可以在開發調試中更高效地使用常量信息。