语法

可以使用 const 关键字或使用 define() 函数来定义常量。虽然 define() 允许将常量定义为任意表达式,但 const 关键字存在如下段落中概述的限制。一旦定义了常量,就不能再更改或取消定义。

使用 const 关键字时,只接受标量 (boolintfloatstring) 表达式和仅包含标量表达式的常量 array。可以将常量定义为 resource,但应避免这样做,因为它会导致意外结果。

只需指定常量名称即可访问常量的值。与变量不同,常量$ 为前缀。如果常量名称是动态获取的,也可以使用 constant() 函数读取常量的值。使用 get_defined_constants() 获取所有已定义常量的列表。

注意: 常量和 (全局) 变量位于不同的命名空间。这意味着例如 true$TRUE 通常是不同的。

如果使用未定义的常量,将抛出 Error。在 PHP 8.0.0 之前,未定义的常量将被解释为一个裸词 string,即 (CONSTANT 与 "CONSTANT")。这种回退自 PHP 7.2.0 起已弃用,并且在发生这种情况时会发出级别为 E_WARNING 的错误。在 PHP 7.2.0 之前,已发出级别为 E_NOTICE 的错误。另请参阅手册条目,了解为什么 $foo[bar] 是错误的(除非 bar 是一个常量)。这并不适用于 (完全) 限定的常量,如果未定义,它们将始终引发 Error

注意: 要检查是否设置了常量,请使用 defined() 函数。

以下列出了常量和变量之间的区别

  • 常量在前面没有美元符号 ($);
  • 常量可以在任何地方定义和访问,而不受变量作用域规则的限制;
  • 一旦设置了常量,就不能重新定义或取消定义;并且
  • 常量只能评估为标量值或数组。

示例 #1 定义常量

<?php
define
("CONSTANT", "Hello world.");
echo
CONSTANT; // 输出 "Hello world."
echo Constant; // 发出错误:未定义的常量 "Constant"
// 在 PHP 8.0.0 之前,输出 "Constant" 并发出警告。
?>

示例 #2 使用 const 关键字定义常量

<?php
// 简单标量值
const CONSTANT = 'Hello World';

echo
CONSTANT;

// 标量表达式
const ANOTHER_CONST = CONSTANT.'; Goodbye World';
echo
ANOTHER_CONST;

const
ANIMALS = array('dog', 'cat', 'bird');
echo
ANIMALS[1]; // 输出 "cat"

// 常量数组
define('ANIMALS', array(
'dog',
'cat',
'bird'
));
echo
ANIMALS[1]; // 输出 "cat"
?>

注意:

与使用 define() 定义常量相反,使用 const 关键字定义的常量必须在顶层作用域中声明,因为它们是在编译时定义的。这意味着它们不能在函数、循环、if 语句或 try/catch 块中声明。

另见

添加笔记

用户贡献笔记 2 条笔记

souzanicolas87 at gmail dot com
2 年前
该文档并没有详细解释 PHP 中声明常量的两种方式之间的关键区别。

Const 在编译时处理,define() 在运行时处理。因此,例如,常量不能使用 Const 条件定义。

我们可以注意到另一个区别发生在类中的常量声明中。Const 渗透到类作用域,而 define() 泄漏到全局作用域。

<?php

Class Myclass (){
const
NAME = "Nicolas";
}

?>

NAME 常量在 MyClass 类作用域内。
login at (two)view dot de
6 年前
只是一个简短的说明
从 PHP7 开始,你甚至可以将多维数组定义为常量

define('QUARTLIST',array('1. Quarter'=>array('jan','feb','mar'),'2.Quarter'=>array('may','jun','jul'));

按预期工作。
To Top