使用const语句或define函数创建常量。约定是对常量名称使用大写字母。
const PI = 3.14; // 浮动
define("EARTH_IS_FLAT", false); // 布尔值
const "UNKNOWN" = null; // 空值
define("APP_ENV", "dev"); // 串
const MAX_SESSION_TIME = 60 * 60; // 整数,使用(标量)表达式可以
const APP_LANGUAGES = ["de", "en"]; // 数组
define("BETTER_APP_LANGUAGES", ["lu", "de"]); // 数组如果您有一个常量,则可以基于它定义另一个:
const TAU = PI * 2;
define("EARTH_IS_ROUND", !EARTH_IS_FLAT);
define("MORE_UNKNOWN", UNKNOWN);
define("APP_ENV_UPPERCASE", strtoupper(APP_ENV)); // 串 manipulation is ok too
// 上面的示例(函数调用)不适用于const:
//const TIME = time(); #因致命错误而失败!不是恒定的标量表达式
define("MAX_SESSION_TIME_IN_MINUTES", MAX_SESSION_TIME / 60);
const APP_FUTURE_LANGUAGES = [-1 => "es"] + APP_LANGUAGES; // 数组操作
define("APP_BETTER_FUTURE_LANGUAGES", array_merge(["fr"], APP_BETTER_LANGUAGES));一些常量名称由PHP保留,无法重新定义。所有这些示例将失败:
define("true", false); // 内部常数
define("false", true); // 内部常数
define("CURLOPT_AUTOREFERER", "something"); // 如果加载了curl扩展程序将失败并且将发布一个通知:
Constant ... already defined in ...
如果您有多个文件,可以在其中定义相同的变量(例如,主配置,然后是本地配置),则以下语法可能有助于避免冲突:
defined("PI") || define("PI", 3.1415); // "define PI if it's not yet defined"define是运行时表达式,而const编译时是。
因此define允许动态值(即函数调用,变量等),甚至动态名称和条件定义。但是,它总是相对于根名称空间进行定义。
const是静态的(例如,仅允许使用其他常量,标量或数组进行操作,并且仅使用它们的有限集合,即所谓的常量标量表达式,即算术,逻辑和比较运算符以及数组解引用),但会自动以名称空间作为前缀与当前活动的名称空间。
const 仅支持将其他常量和标量作为值,并且不支持任何运算。