在PHP 中,常量(constant)是一種用於定義在腳本執行期間不可更改的標識符。通常,我們通過define()或const關鍵字來定義常量。但有時在開發或調試過程中,我們需要查看當前腳本或應用中都定義了哪些常量。此時,PHP 內置函數get_defined_constants()就派上用場了。
這個函數可以以兩種方式使用:
get_defined_constants() :返回一個關聯數組,包含所有已定義的常量。
get_defined_constants(true) :返回一個多維數組,將常量按其來源分組,例如internal (內部)、 user (用戶自定義)等。
本文將聚焦於get_defined_constants(true)['user'] ,即查看所有用戶自定義的常量。
<?php
define('SITE_NAME', '示例網站');
define('BASE_URL', 'https://m66.net');
$user_constants = get_defined_constants(true)['user'];
echo '<pre>';
print_r($user_constants);
echo '</pre>';
運行以上代碼後,輸出類似如下:
Array
(
[SITE_NAME] => 示例網站
[BASE_URL] => https://m66.net
)
我們可以看到,只有我們通過define()明確聲明的常量會出現在user這一組中。 PHP 內部默認定義的常量(如E_ALL 、 PHP_VERSION等)不會包含在內。
在大型項目中,常量定義可能分佈在多個文件中。使用get_defined_constants(true)['user']可以快速列出當前環境中所有自定義常量,幫助開發者確認是否某個常量被重複定義、覆蓋或拼寫錯誤。
在一些配置管理系統中,我們可能希望將所有自定義常量導出成JSON 或其他格式保存。配合json_encode() ,這一功能很容易實現。
<?php
define('API_URL', 'https://m66.net/api');
define('VERSION', '1.0.0');
$user_constants = get_defined_constants(true)['user'];
header('Content-Type: application/json');
echo json_encode($user_constants, JSON_PRETTY_PRINT);
輸出:
{
"API_URL": "https://m66.net/api",
"VERSION": "1.0.0"
}
在一些自定義插件或框架中,我們可能希望插件註冊時能自動識別當前環境的常量配置。通過這個函數,可以無侵入地獲取所有已定義常量並進行業務邏輯處理或兼容性檢查。
只有通過define()或const明確聲明的常量會被歸類到user 。
如果使用了第三方庫,其在初始化時定義的常量也會被視為用戶常量。
不建議在生產環境中頻繁調用此函數輸出結果,尤其是將其內容暴露給用戶,因為可能包含敏感配置信息。
get_defined_constants(true)['user']是一個非常實用的調試和配置輔助工具。在需要審查當前自定義常量的場景下,它提供了簡單而直觀的接口。無論是輸出日誌、生成配置快照,還是進行兼容性檢查,它都是值得掌握的利器。