常量 vs 變數:核心差異
| 特性 | 常量 | 變數 |
| 值可變性 | 定義後不可變更 | 隨時可修改 |
| 前綴符號 | 無 $ | 需 $ |
| 作用域 | 全域可訪問,跨函數/類/檔案 | 受作用域限制 |
| 資料型別 | 僅支援 字串與數字 (PHP 7.1+ 支援陣列) | 支援所有型別 |
define() 語法詳解
define(string $name, mixed $value, bool $case_insensitive = false): bool
| 參數 | 說明 |
$name | 常量名稱(慣例全大寫,如 MAX_SIZE) |
$value | 常量值(字串、整數、浮點數、布林、NULL) |
$case_insensitive | true 不區分大小寫,false(預設)區分 |
範例 1:區分大小寫
define("GREETING", "Hello you!");
echo constant("GREETING"); // Hello you!
// echo GREETING; // 也可直接用名稱
範例 2:不區分大小寫
define("GREETING", "Hello you!", true);
echo constant("greeting"); // Hello you!
defined() 檢測常量是否存在
defined(string $name): bool
- 存在回傳
true,否則 false。
- 常用於條件編譯、避免重複定義。
if (!defined('MY_CONST')) {
define('MY_CONST', 'value');
}
進階技巧
1. 命名空間常量
namespace App\Config;
define('App\Config\DB_HOST', 'localhost'); // 完全限定名稱
define(__NAMESPACE__ . '\DEBUG', true); // 相對當前命名空間
2. 陣列常量(PHP 7.0+)
define('ALLOWED_EXT', ['jpg', 'png', 'gif']);
var_dump(ALLOWED_EXT); // array(3) { ... }
3. 常量與定義順序
常量定義在執行期生效,不可在定義前使用(與編譯期常數不同)。
最佳實踐
- 命名採
UPPER_SNAKE_CASE,加專案前綴避免衝突(如 MYAPP_DB_HOST)。
- 配置值、狀態碼、固定業務參數優先用常量。
- 避免在迴圈/高頻路徑中重複
defined() 檢測,微小效能損耗。
- PHP 7.1+ 建議改用
const 關鍵字(類常量、介面常量),語法更清晰且支援陣列。