首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP define() 與 defined() 函數完整指南:常量定義、大小寫控制與存在性檢測

     編輯:PHP 綜合知識

常量 vs 變量:核心差異

特性常量變量
定義後可修改❌ 不可變✅ 可變
名稱前綴無 $ 符號需 $ 符號
作用域全局可訪問(跨函數/類/文件)受作用域限制
值類型標量(int/float/string/bool)+ PHP 7+ 數組任意類型
定義方式define() / const賦值操作

define() 完整語法

bool define(string $name, mixed $value, bool $case_insensitive = false)

參數詳解

  • $name:常量名稱,慣例全大寫(如 MAX_SIZE)
  • $value:常量值,PHP 7.0+ 支持數組
  • $case_insensitive:true 不區分大小寫,false(默認)區分

代碼示例

示例 1:區分大小寫(默認)

define('GREETING', 'Hello you! How are you today?');
echo constant('GREETING');  // Hello you! How are you today?
echo GREETING;              // 直接使用
// echo greeting;           // 錯誤:未定義常量

示例 2:不區分大小寫

define('GREETING', 'Hello you! How are you today?', true);
echo constant('greeting');  // Hello you! How are you today?
echo GREETING;              // 同樣可用
echo Greeting;              // 同樣可用

示例 3:陣列常量(PHP 7.0+)

define('ALLOWED_EXT', ['jpg', 'png', 'gif', 'webp']);
echo ALLOWED_EXT[0];  // jpg
in_array('pdf', ALLOWED_EXT);  // false

defined() 存在性檢測

bool defined(string $name)
  • 返回 true(存在)或 false(不存在)
  • 不區分大小寫參數:檢測時需與定義時一致(區分大小寫常量需精確名稱)

代碼示例

define('GREETING', 'Hello');
var_dump(defined('GREETING'));  // bool(true)
var_dump(defined('GREETING2')); // bool(false)

// 條件定義模式
if (!defined('CONFIG_LOADED')) {
    define('CONFIG_LOADED', true);
    // 載入配置...
}

const 關鍵字 vs define()

特性constdefine()
定義時機編譯時運行時
命名空間受命名空間影響全局命名空間(除非在命名空間中定義)
值類型標量/數組(PHP 7+)標量/數組(PHP 7+)
大小寫不敏感❌ 不支持✅ 第三參數控制
條件定義❌ 不可在 if 中✅ 可動態定義
類常量✅ 支持❌ 不支持

最佳實踐建議

  1. 配置類常量優先用 const(編譯時優化、IDE 提示、命名空間隔離)
  2. 運行時動態定義、需大小寫不敏感、跨文件全局共享用 define()
  3. 常量命名: 全大寫 + 下劃線分隔(DB_MAX_CONNECTIONS)
  4. 避免魔術數字: 所有業務閾值、狀態碼、配置參數常量化
  5. PHP 8.1+: 可用 define('CONST', value, true) 但官方建議統一區分大小寫

常見陷阱

  • defined('MY_CONST') 檢測不存在時返回 false,但直接使用未定義常量會觸發 Warning 並被視為字符串 'MY_CONST'
  • 類常量 Class::CONST 需用 defined('Class::CONST') 檢測
  • 命名空間下 define() 會注入全局空間,推薦 const 或 define(__NAMESPACE__ . '\CONST', value)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved