定义常量

使用 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 仅支持其他常量和标量作为值,并且不支持任何操作。