魔術常數 (Magic Constants)
根據使用位置動態解析,大小寫不敏感,但慣例全大寫:
| 常數 | 說明 | 範例輸出 |
__FILE__ | 目前檔案完整路徑 (含檔名),符號連結已解析 | /var/www/html/index.php |
__DIR__ | 目前檔案所在目錄 (等同 dirname(__FILE__)),PHP 5.3+ | /var/www/html |
__LINE__ | 目前行號 | 42 |
__FUNCTION__ | 目前函數名稱 (區分大小寫),PHP 5.3+ 含命名空間 | MyNamespace\myFunction |
__CLASS__ | 目前類別名稱 (含命名空間),PHP 5.3+ 含 trait | App\Models\User |
__TRAIT__ | 目前 Trait 名稱 (含命名空間),PHP 5.4+ | App\Traits\Loggable |
__METHOD__ | 目前類別方法名稱 (含類別),PHP 5.0+ | App\Models\User::getName |
__NAMESPACE__ | 目前命名空間名稱,PHP 5.3+ | App\Controllers |
ClassName::class | 類別完整名稱 (編譯期解析),PHP 5.5+ | App\Models\User |
PHP 核心預定義常數
| 常數 | 說明 | 範例/備註 |
PHP_VERSION | PHP 版本字串 | '8.2.10' |
PHP_VERSION_ID | 版本號整數 (方便版本比較) | 80210 (8.2.10) |
PHP_MAJOR_VERSION | 主版本號 | 8 |
PHP_MINOR_VERSION | 次版本號 | 2 |
PHP_RELEASE_VERSION | 發布版本號 | 10 |
PHP_EXTRA_VERSION | 額外版本標識 | '-dev', '-RC1' |
PHP_ZTS | 是否啟用 Thread Safety | 0 或 1 |
PHP_DEBUG | 是否為除錯版本 | 0 或 1 |
PHP_OS | 作業系統家族 (編譯時) | 'Linux', 'WINNT', 'Darwin' |
PHP_OS_FAMILY | 作業系統家族 (執行時),PHP 7.2+ | 'Linux', 'Windows', 'Darwin' |
PHP_SAPI | Server API 類型 | 'cli', 'fpm-fcgi', 'apache2handler' |
PHP_EOL | 平台換行符 | "\n" (Linux), "\r\n" (Windows) |
PHP_INT_MAX | 整數最大值 (平台相關) | 9223372036854775807 (64-bit) |
PHP_INT_MIN | 整數最小值 | -9223372036854775808 |
PHP_INT_SIZE | 整數位元組數 | 8 (64-bit) |
PHP_FLOAT_MAX | 浮點數最大值 | 1.7976931348623157E+308 |
PHP_FLOAT_MIN | 浮點數最小正值 | 2.2250738585072014E-308 |
PHP_FLOAT_DIG | 浮點數精確位數 | 15 |
PHP_FLOAT_EPSILON | 浮點數機器精度 | 2.220446049250313E-16 |
DEFAULT_INCLUDE_PATH | 預設 include_path | '.:/usr/share/php' |
PEAR_INSTALL_DIR | PEAR 安裝目錄 | /usr/share/php |
PEAR_EXTENSION_DIR | PEAR 擴展目錄 | /usr/lib/php/extensions |
PHP_EXTENSION_DIR | PHP 擴展目錄 | /usr/lib/php/extensions |
PHP_PREFIX | PHP 安裝前綴 | /usr |
PHP_BINDIR | PHP 二進制目錄 | /usr/bin |
PHP_LIBDIR | PHP 函式庫目錄 | /usr/lib |
PHP_DATADIR | PHP 資料目錄 | /usr/share |
PHP_SYSCONFDIR | PHP 系統設定目錄 | /etc |
PHP_LOCALSTATEDIR | PHP 區域狀態目錄 | /var |
PHP_CONFIG_FILE_PATH | php.ini 路徑 | /etc/php/8.2/cli |
PHP_CONFIG_FILE_SCAN_DIR | 掃描額外 .ini 目錄 | /etc/php/8.2/cli/conf.d |
PHP_SHLIB_SUFFIX | 共享庫副檔名 | 'so' 或 'dll' |
PHP_FD_SETSIZE | select() 最大檔案描述符 | 1024 |
布林與 Null 常數
| 常數 | 等同於 | 備註 |
TRUE | true | 慣例用小寫 true |
FALSE | false | 慣例用小寫 false |
NULL | null | 慣例用小寫 null |
錯誤層級常數 (Error Level Constants)
用於 error_reporting()、set_error_handler()、trigger_error():
| 常數 | 數值 | 說明 |
E_ERROR | 1 | 致命執行錯誤,腳本終止 |
E_WARNING | 2 | 執行警告,腳本繼續 |
E_PARSE | 4 | 編譯期語法解析錯誤 |
E_NOTICE | 8 | 執行期提示 (如未定義變數) |
E_CORE_ERROR | 16 | PHP 核心啟動致命錯誤 |
E_CORE_WARNING | 32 | PHP 核心啟動警告 |
E_COMPILE_ERROR | 64 | 編譯期致命錯誤 |
E_COMPILE_WARNING | 128 | 編譯期警告 |
E_USER_ERROR | 256 | 使用者觸發致命錯誤 |
E_USER_WARNING | 512 | 使用者觸發警告 |
E_USER_NOTICE | 1024 | 使用者觸發提示 |
E_STRICT | 2048 | 編碼標準建議 (PHP 5.4+ 併入 E_ALL) |
E_RECOVERABLE_ERROR | 4096 | 可捕獲致命錯誤 (型別提示失敗等) |
E_DEPRECATED | 8192 | 棄用功能警告 |
E_USER_DEPRECATED | 16384 | 使用者觸發棄用警告 |
E_ALL | 32767 | 所有錯誤 (含 E_STRICT) |
數學常數 (Math Constants)
| 常數 | 值 (約) | 說明 |
M_PI | 3.1415926535898 | 圓周率 π |
M_E | 2.718281828459 | 自然對數底 e |
M_LOG2E | 1.442695040889 | log2(e) |
M_LOG10E | 0.434294481903 | log10(e) |
M_LN2 | 0.69314718056 | ln(2) |
M_LN10 | 2.302585092994 | ln(10) |
M_PI_2 | 1.5707963267949 | π/2 |
M_PI_4 | 0.78539816339745 | π/4 |
M_1_PI | 0.31830988618379 | 1/π |
M_2_PI | 0.63661977236758 | 2/π |
M_SQRTPI | 1.7724538509055 | √π |
M_2_SQRTPI | 1.1283791670955 | 2/√π |
M_SQRT2 | 1.4142135623731 | √2 |
M_SQRT3 | 1.7320508075689 | √3 |
M_SQRT1_2 | 0.70710678118655 | 1/√2 |
註:數學常數需啟用 extension=math (PHP 8.0+ 內建) 或定義 define('M_PI', pi()) 等相容寫法。
實用技巧:版本比較與跨平台路徑
<?php
// 版本比較 (利用 PHP_VERSION_ID)
if (PHP_VERSION_ID >= 80100) {
// PHP 8.1+ 專屬功能 (readonly, fibers, enum 等)
}
// 跨平台路徑分隔符
$path = __DIR__ . DIRECTORY_SEPARATOR . 'config' . DIRECTORY_SEPARATOR . 'app.php';
// 或使用 PHP 內建常數
$path = __DIR__ . '/' . 'config/app.php'; // PHP 可自動處理 Windows 路徑
// 取得專案根目錄 (通用模式)
define('ROOT_PATH', dirname(__DIR__, 2)); // PHP 7.0+ 多層 dirname
// 判斷執行環境
if (PHP_SAPI === 'cli') {
echo "CLI 模式執行\n";
} elseif (str_starts_with(PHP_SAPI, 'fpm')) {
echo "PHP-FPM 模式\n";
}
?>
總結
PHP 系統常數涵蓋魔術常數 (檔案/行號/類別/方法/命名空間)、核心環境資訊 (版本/OS/SAPI/整數浮點數限制/路徑)、錯誤層級、數學常數四大類。善用它們能撰寫出可攜性強、除錯容易、效能優異的程式碼。建議將常用常數整理成專案 Constants.php 或 bootstrap.php 集中管理,減少硬編碼與重複查閱手冊。