常量是简单值的标识符(名称)。常量值在脚本执行期间不能更改。常量区分大小写。按照惯例,常量标识符始终为大写。

常量的名称遵循与 PHP 中的任何标签相同的规则。有效的常量名称以字母或下划线开头,后跟任意数量的字母、数字或下划线。

注意: 与超全局变量一样,常量的作用域是全局的。可以从脚本中的任何位置访问常量,而无需考虑范围。

define() 函数

PHP define() 函数用于定义命名常量。使用此函数的语法如下:

define(constant_name, value) 

参数

constant_name必需。 指定常量的名称。
value必需。 指定常量的值。在 PHP 5 中,值必须是标量值(int、float、string、bool 或 null)。在 PHP 7 中,也接受数组值。

注意:在 PHP 8.0.0 之前,使用 Define() 函数定义的常量可以不区分大小写。

constant() 函数

PHP constant() 函数用于获取常量的值。如果您需要检索常量的值,但不知道其名称,即它存储在变量中或由函数返回,那么它很有用。使用此函数的语法如下:

constant(name) 

参数

name必需。 指定常量的名称。

与变量不同,常量不需要$ 符号。可以使用常量的名称来检索常量的值。如果需要动态获取常量的名称,可以使用constant()函数来获取常量的值。

<?php
//创建一个常量
define("MAX_SIZE", 100);

//检索常量值
echo MAX_SIZE."\n";
//检索常量值的另一种方式
echo constant("MAX_SIZE")."\n";
?> 

上述代码的输出将是:

100
100 

有效和无效的常量名称

常量的名称遵循与 PHP 中任何标签相同的规则。有效的常量名称以字母或下划线开头,后跟任意数量的字母、数字或下划线。

//有效的常量名称
define("FOO", "something");
define("FOO2", "something else");
define("FOO_BAR", "something more");

//无效的常量名称
define("2FOO",    "something"); 

常量是全局的

与超全局一样,常量的范围是全局的。可以从脚本中的任何位置访问常量,而无需考虑范围。考虑下面的示例:

<?php 
function CreateConstant() {
  define("MAX_SIZE", 100);
}

CreateConstant();

//获取常量值
echo MAX_SIZE."\n";
?> 

上述代码的输出将是:

100 

PHP 常量数组

在 PHP 7 中,可以创建数组常量。考虑下面的示例:

<?php
//创建数组常量
define("Colors", ["Red", "Green", "Blue"]);

//从数组常量中检索值
for ($i = 0; $i < count(Colors); $i++) {
  echo Colors[$i]."\n";
}
?> 

上述代码的输出将是:

Red
Green
Blue 

PHP 魔法常量

有九个魔法常量,它们会根据位置而变化他们被使用了。例如,__LINE__ 的值取决于它在脚本中使用的行。

所有这些"神奇"常量都是在编译时解析的,这与常规常量在运行时解析不同。这些特殊常量不区分大小写,如下所示:

名称描述
__LINE__文件的当前行号。
__FILE__完整路径和文件的文件名。如果在包含内部使用,则返回包含文件的名称。
__DIR__文件的目录。如果在包含内部使用,则返回包含文件的目录。这相当于 dirname(__FILE__)。该目录名称没有尾部斜杠,除非它是根目录。
__FUNCTION__函数名称,或匿名函数。
__CLASS__类名。类名包括声明它的命名空间。在特征方法中使用时,__CLASS__ 是使用该特征的类的名称。
__TRAIT__特征名称。特征名称包括声明它的命名空间。
__METHOD__类方法名称。
__NAMESPACE__当前命名空间的名称。
ClassName::class完全限定的类名称。