常量是简单值的标识符(名称)。常量值在脚本执行期间不能更改。常量区分大小写。按照惯例,常量标识符始终为大写。
常量的名称遵循与 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 | 完全限定的类名称。 |