2024 年 PHP 日本大会

语法

可以使用 const 关键字或使用 define() 函数来定义常量。虽然 define() 允许将常量定义为任意表达式,但 const 关键字有一些限制,如下段所述。一旦定义了常量,就永远无法更改或取消定义。

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

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

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

如果使用了未定义的常量,则会抛出 Error。在 PHP 8.0.0 之前,未定义的常量将被解释为一个简单的 string,即 (CONSTANT vs "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
7 年前
只是一个简短的说明
从 PHP7 开始,你甚至可以将多维数组定义为常量

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

按预期工作。
To Top