定義常量

使用 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 僅支援其他常量和標量作為值,並且不支援任何操作。