2024 年 PHP 日本研討會

語法

常數可以使用 const 關鍵字或 define() 函式來定義。 define() 允許將常數定義為任意運算式,而 const 關鍵字則有一些限制,如下段所述。一旦定義了常數,就永遠不能更改或取消定義。

使用 const 關鍵字時,只接受純量(boolintfloatstring)表達式以及僅包含純量表達式的常數 陣列。可以將常數定義為 資源,但不建議這樣做,因為它可能導致非預期的結果。

常數的值可以透過指定其名稱來存取。與變數不同,常數的前面 *不* 加 $ 符號。如果常數的名稱是動態取得的,也可以使用 constant() 函式來讀取常數的值。使用 get_defined_constants() 可以取得所有已定義常數的列表。

注意常數和(全域)變數位於不同的命名空間。這意味著,例如 true$TRUE 通常是不同的。

如果使用了未定義的常數,會拋出 Error。在 PHP 8.0.0 之前,未定義的常數會被解釋為裸字 字串,例如 (CONSTANT vs "CONSTANT")。這種回退機制自 PHP 7.2.0 起已被棄用,並且在發生這種情況時會發出級別為 E_WARNING 的錯誤。在 PHP 7.2.0 之前,發出的錯誤級別為 E_NOTICE。另請參閱手冊中關於為什麼 $foo[bar] 是錯誤的(除非 bar 是一個常數)的說明。這不適用於 (完全)限定常數,如果未定義,它們將始終引發 Error

注意要檢查常數是否已設定,請使用 defined() 函式。

以下是常數和變數之間的差異:

  • 常數前面沒有錢字號 ($);
  • 常數可以在任何地方定義和存取,不受變數作用域規則的限制;
  • 常數一旦設定後就不能重新定義或取消定義;以及
  • 常數只能評估為純量值或陣列。

範例 #1 定義常數

<?php
define
("CONSTANT", "Hello world.");
echo
CONSTANT; // 輸出 "Hello world."
echo Constant; // 產生錯誤:未定義的常數 "Constant"
// 在 PHP 8.0.0 之前,輸出 "Constant" 並發出警告。
?>

範例 #2 使用 const 關鍵字定義常數

<?php
// 簡單的純量值
const CONSTANT = 'Hello World';

echo
CONSTANT;

// 純量運算式
const ANOTHER_CONST = CONSTANT.'; Goodbye World';
echo
ANOTHER_CONST;

const
ANIMALS = array('dog', 'cat', 'bird');
echo
ANIMALS[1]; // 輸出 "cat"

// 常數陣列
define('ANIMALS', array(
'dog',
'cat',
'bird'
));
echo
ANIMALS[1]; // 輸出 "cat"
?>

注意事項:

與使用 define() 定義常數不同,使用 const 關鍵字定義的常數必須在最上層範圍宣告,因為它們是在編譯時定義的。這表示它們不能在函式、迴圈、if 陳述式或 try/catch 區塊內宣告。

另請參閱

新增註釋

使用者貢獻的註釋 2 則註釋

souzanicolas87 at gmail dot com
2 年前
文件沒有詳細解釋在 PHP 中宣告常數的兩種方式之間的關鍵差異。

Const 在編譯時處理,define() 在執行時處理。因此,例如,不能使用 Const 有條件地定義常數。

我們可以注意到的另一個差異發生在類別中的常數宣告。 Const 滲透到類別範圍,而 define() 洩漏到全域範圍。

<?php

Class Myclass (){
const
NAME = "Nicolas";
}

?>

NAME 常數在 MyClass 類別的範圍內。
login at (two)view dot de
7 年前
快速說明
從 PHP7 開始,您甚至可以將多維陣列定義為常數

define('QUARTLIST',array('1. Quarter'=>array('jan','feb','mar'),'2.Quarter'=>array('may','jun','jul'));

可以按預期工作。
To Top