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