$ 前綴、慣用全大寫命名。$ 開頭。| 常量 | 說明 | 範例輸出 |
|---|---|---|
__FILE__ | 目前執行腳本完整路徑(含檔名) | /var/www/html/index.php |
__DIR__ | 目前腳本所在目錄(PHP 5.3+) | /var/www/html |
__LINE__ | 目前行號 | 42 |
__FUNCTION__ | 目前函數名稱(PHP 4.3+) | myFunc |
__CLASS__ | 目前類別名稱(PHP 4.3+) | UserModel |
__METHOD__ | 目前類別方法名稱(PHP 5.0+) | UserModel::getName |
__NAMESPACE__ | 目前命名空間(PHP 5.3+) | App\Models |
PHP_VERSION | PHP 版本字串 | 8.2.12 |
PHP_OS | 作業系統家族 | Linux |
PHP_SAPI | Server API 類型 | fpm-fcgi, cli |
PHP_EOL | 平台換行符 | \n (Linux), \r\n (Win) |
PHP_INT_MAX | 整數最大值 | 9223372036854775807 (64-bit) |
TRUE, FALSE, NULL | 布林與空值 | - |
<?php
define('APP_NAME', 'MyApplication');
define('MAX_UPLOAD_SIZE', 10 * 1024 * 1024); // 運算式
define('ALLOWED_EXTS', ['jpg','png','gif']); // 陣列常量 (PHP 7+)
echo APP_NAME; // MyApplication
// 動態定義
$prefix = 'DB_';
define($prefix . 'HOST', 'localhost'); // DB_HOST
<?php
class Config {
const DB_HOST = 'localhost';
const STATUS = ['draft' => 0, 'published' => 1];
}
// 呼叫
Config::DB_HOST;
差異:const 必須在最頂層或類別內、名稱不可動態、編譯期解析、效能略優;define() 可在條件判斷/迴圈中動態定義。
<?php
function logError($message) {
$msg = sprintf(
"[%s] %s:%d - %s\n",
date('Y-m-d H:i:s'),
__FILE__,
__LINE__,
$message
);
error_log($msg, 3, '/var/log/app_errors.log');
}
logError('資料庫連線失敗'); // 自動記錄檔案與行號
echo UNDEFINED_CONST 會發出 Notice 並輸出 "UNDEFINED_CONST"(PHP 8.0+ 拋 Error)。define('FOO', 1, true) 第三參數 true 可設不區分大小寫(不推薦,易混淆)。define('FOO', 1) 定義於全域;namespace A; define('FOO', 2) 實際定義 \A\FOO。善用常量消除「魔術數字」,配合魔術常量實現精準除錯,是撰寫可維護 PHP 專案的基礎功夫。現代專案建議:類別常量用 const、全域設定用 define()、環境差異配置用 .env + vlucas/phpdotenv。