定義常量
使用 const
語句或 define
函式建立常量。慣例是使用大寫字母作為常量名稱。
使用顯式值定義常量
const PI = 3.14; // float
define("EARTH_IS_FLAT", false); // boolean
const "UNKNOWN" = null; // null
define("APP_ENV", "dev"); // string
const MAX_SESSION_TIME = 60 * 60; // integer, using (scalar) expressions is ok
const APP_LANGUAGES = ["de", "en"]; // arrays
define("BETTER_APP_LANGUAGES", ["lu", "de"]); // arrays
使用另一個常量定義常量
如果你有一個常量,你可以根據它定義另一個常量:
const TAU = PI * 2;
define("EARTH_IS_ROUND", !EARTH_IS_FLAT);
define("MORE_UNKNOWN", UNKNOWN);
define("APP_ENV_UPPERCASE", strtoupper(APP_ENV)); // string manipulation is ok too
// the above example (a function call) does not work with const:
// const TIME = time(); # fails with a fatal error! Not a constant scalar expression
define("MAX_SESSION_TIME_IN_MINUTES", MAX_SESSION_TIME / 60);
const APP_FUTURE_LANGUAGES = [-1 => "es"] + APP_LANGUAGES; // array manipulations
define("APP_BETTER_FUTURE_LANGUAGES", array_merge(["fr"], APP_BETTER_LANGUAGES));
保留常量
一些常量名稱由 PHP 保留,無法重新定義。所有這些例子都會失敗:
define("true", false); // internal constant
define("false", true); // internal constant
define("CURLOPT_AUTOREFERER", "something"); // will fail if curl extension is loaded
並將釋出通知:
Constant ... already defined in ...
條件定義
如果你有多個檔案可以定義相同的變數(例如,你的主配置然後是本地配置),那麼遵循語法可能有助於避免衝突:
defined("PI") || define("PI", 3.1415); // "define PI if it's not yet defined"
const
vs define
define
是一個執行時表示式,而 const
是一個編譯時間。
因此,define
允許動態值(即函式呼叫,變數等),甚至動態名稱和條件定義。然而,它始終相對於根名稱空間進行定義。
const
是靜態的(因為只允許與其他常量,標量或陣列一起操作,並且只允許它們的一組受限制,即所謂的常量標量表示式,即算術,邏輯和比較運算子以及陣列解除引用),但它們是自動名稱空間以當前活動的名稱空間為字首。
const
僅支援其他常量和標量作為值,並且不支援任何操作。