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

PHP define() 與 defined() 函數深度解析:常量定義與檢測最佳實踐

     編輯:PHP 綜合知識

常量 vs 變數:核心差異

特性常量變數
值可變性定義後不可變更隨時可修改
前綴符號無 $需 $
作用域全域可訪問,跨函數/類/檔案受作用域限制
資料型別僅支援 字串與數字 (PHP 7.1+ 支援陣列)支援所有型別

define() 語法詳解

define(string $name, mixed $value, bool $case_insensitive = false): bool
參數說明
$name常量名稱(慣例全大寫,如 MAX_SIZE)
$value常量值(字串、整數、浮點數、布林、NULL)
$case_insensitivetrue 不區分大小寫,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 關鍵字(類常量、介面常量),語法更清晰且支援陣列。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved