PHP 定义常数
示例
使用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: //constTIME=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"
const与define
define是运行时表达式,而const编译时是。
因此define允许动态值(即函数调用,变量等),甚至动态名称和条件定义。但是,它总是相对于根名称空间进行定义。
const是静态的(例如,仅允许使用其他常量,标量或数组进行操作,并且仅使用它们的有限集合,即所谓的常量标量表达式,即算术,逻辑和比较运算符以及数组解引用),但会自动以名称空间作为前缀与当前活动的名称空间。
const仅支持将其他常量和标量作为值,并且不支持任何运算。