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

PHP 常量定義與使用完全指南:define、const、魔術常量與最佳實踐

     編輯:PHP 綜合知識

定義常量的兩種方式

方式語法作用域特點
define()define('NAME', 'value', true)全局運行時定義、可動態名稱、第三參數控制大小寫敏感(棄用)
constconst NAME = 'value';命名空間/類編譯時定義、性能略快、支持數組(PHP 5.6+)、類常量必須用 const

核心代碼示例

<?php
// 1. define() - 全局常量
define('APP_VERSION', '1.0.0');
define('DB_CONFIG', [
    'host' => 'localhost',
    'port' => 3306,
], false); // 大小寫敏感(推薦)

// 2. const - 命名空間/類常量
namespace App\Config;
const API_KEY = 'secret_key';
const ALLOWED_EXT = ['jpg', 'png', 'gif'];

class User {
    const STATUS_ACTIVE = 1;
    const STATUS_BANNED = 2;
    // const 只能是標量/數組,不能是對象/資源
}

// 3. 使用
echo APP_VERSION;           // 1.0.0
echo \App\Config\API_KEY;   // secret_key
echo User::STATUS_ACTIVE;   // 1

// 4. 動態獲取
$name = 'APP_VERSION';
echo constant($name);       // 1.0.0

// 5. 判斷是否定義
if (defined('APP_VERSION')) { /* ... */ }

// 6. 獲取所有已定義常量
print_r(get_defined_constants(true)['user']); // 用戶定義常量
?>

魔術常量(編譯時解析,非真正常量)

常量含義示例輸出
__LINE__當前行號10
__FILE__當前文件絕對路徑/var/www/index.php
__DIR__當前文件目錄(等同 dirname(__FILE__))/var/www
__FUNCTION__函數名myFunc
__CLASS__類名(含命名空間)App\Model\User
__TRAIT__Trait 名App\Traits\Loggable
__METHOD__類方法名App\Model\User::getName
__NAMESPACE__當前命名空間App\Model
ClassName::class類完全限定名(PHP 5.5+)App\Model\User

預定義核心常量

<?php
PHP_VERSION;      // '8.2.10'
PHP_OS;           // 'Linux'
PHP_SAPI;         // 'fpm-fcgi' / 'cli'
PHP_EOL;          // 換行符(跨平台)
PHP_INT_MAX;      // 最大整數
DEFAULT_INCLUDE_PATH;
PEAR_INSTALL_DIR;
// ... 更多見手冊
?>

最佳實踐與避坑

  1. 常量名規範:全大寫 + 下劃線 SNAKE_CASE(如 MAX_UPLOAD_SIZE)。
  2. 優先用 const:編譯時優化、IDE 支持更好、避免運行時拼接字符串名稱的錯誤。
  3. 配置類常量化:將陣列配置定義為 const,而非 define 返回陣列(PHP 5.6+ 支持)。
  4. 避免大小寫不敏感:define('NAME', 'val', true) 已棄用,統一區分大小寫。
  5. 常量 vs 環境變量:敏感配置(DB 密碼、API Key)必須用環境變量(getenv()/$_ENV),不要寫在代碼常量中。
  6. 類常量訪問:self::CONST(當前類)、static::CONST(晚靜態綁定)、ParentClass::CONST。

結論

現代 PHP:類/命名空間用 const,全局極少數用 define()。善用魔術常量消除硬編碼路徑,配置外置環境變量,構建安全、可維護的應用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved