章 13. 常量

常量是一個簡單值的標識符(名字)。如同其名稱所暗示的,在腳本執行期間該值不能改變(除了所謂的魔術常量,它們其實不是常量)。常量預設為大小寫敏感。按照慣例常量標識符總是大寫的。

常量名和其它任何 PHP 標籤遵循同樣的命名規則。合法的常量名以字母或下劃線開始,後面跟著任何字母,數字或下劃線。用正則表達式是這樣表達的:[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*

例子 13-1. 合法與非法的常量名

<?php

// 合法的常量名
define("FOO",     "something");
define("FOO2",    "something else");
define("FOO_BAR""something more")

// 非法的常量名
define("2FOO",    "something");

// This is valid, but should be avoided:
// PHP may one day provide a magical constant
// that will break your script
define("__FOO__""something");

?>

注: 在這裡,字母是 a-z,A-Z,以及從 127 到 255(0x7f-0xff)的 ASCII 字元。

superglobals 一樣,常量的範圍是全局的。不用管作用功能變數就可以在腳本的任何地方訪問常量。有關作用得更多訊息請閱讀手冊中的變量範圍

語法

可以用 define() 函數來定義常量。一個常量一旦被定義,就不能再改變或是取消定義。

常量只能包括標量資料(booleanintegerfloatstring)。

可以簡單的通過指定其名字來取得常量的值,不要在常量前面加上 $ 符號。若果常量名是動態的,也可以用函數 constant() 來讀取常量的值。用 get_defined_constants() 可以獲得所有已定義的常量清單。

注: 常量和(全局)變量在不同的名字空間中。這意味著例如 TRUE$TRUE 是不同的。

若果使用了一個未定義的常量,PHP 假定想要的是該常量本身的名字,如同用字串呼叫它一樣(CONSTANT 對應 "CONSTANT")。此時將發出一個 E_NOTICE 級的錯誤。參見手冊中為什麼 $foo[bar] 是錯誤的(除非事先用 define()bar 定義為一個常量)。若果只想檢查是否定義了某常量,用 defined() 函數。

常量和變量不同:

  • 常量前面沒有美元符號($);

  • 常量只能用 define() 函數定義,而不能通過賦值語句;

  • 常量可以不用理會變量範圍的規則而在任何地方定義和訪問;

  • 常量一旦定義就不能被重新定義或是取消定義;

  • 常量的值只能是標量。

例子 13-2. 定義常量

<?php
define
("CONSTANT""Hello world.");
echo 
CONSTANT// outputs "Hello world."
echo Constant// outputs "Constant" and issues a notice.
?>

參見類常量