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:
//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"

const 与 define

define是运行时表达式,而const编译时是。

因此define允许动态值(即函数调用,变量等),甚至动态名称和条件定义。但是,它总是相对于根名称空间进行定义。

const是静态的(例如,仅允许使用其他常量,标量或数组进行操作,并且仅使用它们的有限集合,即所谓的常量标量表达式,即算术,逻辑和比较运算符以及数组解引用),但会自动以名称空间作为前缀与当前活动的名称空间。

const 仅支持将其他常量和标量作为值,并且不支持任何运算。