可以使用 const
關(guān)鍵字或 define() 函數(shù)兩種方法來(lái)定義一個(gè)常量。函數(shù)
define() 允許將常量定義為一個(gè)表達(dá)式,而
const
關(guān)鍵字有一些限制,具體可參見(jiàn)下述章節(jié)。一個(gè)常量一旦被定義,就不能再改變或者取消定義。
使用 const
關(guān)鍵字定義常量時(shí),只能包含標(biāo)量數(shù)據(jù)(bool、int、float
、string)。可以將常量定義為一個(gè)表達(dá)式,也可以定義為一個(gè) array。還可以定義
resource 為常量,但應(yīng)盡量避免,因?yàn)榭赡軙?huì)造成不可預(yù)料的結(jié)果。
可以簡(jiǎn)單的通過(guò)指定其名字來(lái)取得常量的值,與變量不同,不應(yīng)該在常量前面加上
$
符號(hào)。如果常量名是動(dòng)態(tài)的,也可以用函數(shù)
constant() 來(lái)獲取常量的值。用
get_defined_constants() 可以獲得所有已定義的常量列表。
注意: 常量和(全局)變量在不同的名字空間中。這意味著例如
true
和 $TRUE 是不同的。
如果使用了一個(gè)未定義的常量,則會(huì)拋出 Error。
在 PHP 8.0.0 之前,調(diào)用未定義的常量會(huì)被解釋為一個(gè)該常量的
字符串,即(CONSTANT 對(duì)應(yīng) "CONSTANT" )。
此方法已在 PHP 7.2.0 中被廢棄,會(huì)拋出一個(gè) E_WARNING
級(jí)錯(cuò)誤。(PHP 7.2.0 之前會(huì)發(fā)出一個(gè)
E_NOTICE 級(jí)的錯(cuò)誤。)參見(jiàn)手冊(cè)中為什么
$foo[bar]
是錯(cuò)誤的(除非 bar
是一個(gè)常量)。這不適用于 (完全)限定的常量,如果未定義,將始終引發(fā) Error 。
注意: 如果要檢查是否定義了某常量,請(qǐng)使用 defined() 函數(shù)。
常量和變量有如下不同:
$
);
示例 #1 定義常量
<?php
define("CONSTANT", "Hello world.");
echo CONSTANT; // 輸出 "Hello world."
echo Constant; // 拋出錯(cuò)誤:未定義的常量 "Constant"
// 在 PHP 8.0.0 之前,輸出 "Constant" 并發(fā)出一個(gè)提示級(jí)別錯(cuò)誤信息
?>
示例 #2 使用關(guān)鍵字 const
定義常量
<?php
// 簡(jiǎn)單的標(biāo)量值
const CONSTANT = 'Hello World';
echo CONSTANT;
// 標(biāo)量表達(dá)式
const ANOTHER_CONST = CONSTANT.'; Goodbye World';
echo ANOTHER_CONST;
const ANIMALS = array('dog', 'cat', 'bird');
echo ANIMALS[1]; // 將輸出 "cat"
// 常量數(shù)組
define('ANIMALS', array(
'dog',
'cat',
'bird'
));
echo ANIMALS[1]; // 將輸出 "cat"
?>
?>
注意:
和使用 define() 來(lái)定義常量相反的是,使用
const
關(guān)鍵字定義常量必須處于最頂端的作用域,因?yàn)橛么朔椒ㄊ窃诰幾g時(shí)定義的。這就意味著不能在函數(shù)內(nèi),循環(huán)內(nèi)以及if
或try
/catch
語(yǔ)句之內(nèi)用const
來(lái)定義常量。