PHP常量

2023-09-20 44

常量是一个简单值的标识符(名字)。如同其名称所暗示的,在脚本执行期间该值不能改变(除了所谓的 魔术常量,它们其实不是常量)。常量大小写敏感。传统上常量标识符总是大写的。在 PHP 8.0.0 之前,使用 define() 定义的常量可能不区分大小写。

常量名和其它任何 PHP 标签遵循同样的命名规则。合法的常量名以字母或下划线开始,后面跟着任何字母,数字或下划线。用正则表达式是这样表达的: ^[a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*$。还可以使用 define() 函数来定义包含保留字或非常规名称的常量,这类常量可以通过 constant() 函数来获取名称,但是不推荐这种用法。

示例:合法与非法的常量名

<?php

// 合法的常量名
define("FOO", "something");
define("FOO2", "something else");
define("FOO_BAR", "something more");

// 非法的常量名
define("2FOO", "something");

// 下面的定义是合法的,但应该避免这样做:(自定义常量不要以__开头)
// 也许将来有一天 PHP 会定义一个 __FOO__ 的魔术常量
// 这样就会与你的代码相冲突
define("__FOO__", "something");

?>

注意: 这里的字母指的是 a-z,A-Z,以及从 128 到 255(0x80-0xff)的 ASCII 字符。

一、语法

一般情况下可以使用 const 关键字或 define() 函数两种方法来定义一个常量。函数 define() 允许将常量定义为一个表达式,而 const 关键字有一些限制。一个常量一旦被定义,就不能再改变或者取消定义;使用 const 关键字定义常量时,只能包含标量数据(bool、int、float 、string),可以将常量定义为一个表达式,也可以定义为一个 array,还可以定义 resource 为常量,但可能会造成不可预料的结果,所以尽量避免这个做法。

还可以通过直接指定常量名称来获取其值,与变量不同,不需要在常量名称前面加上 $ 符号。如果常量的名称是动态的,还可以使用 constant() 函数来获取常量的值。同时,使用 get_defined_constants() 函数可以获取所有已定义的常量列表。

注意:常量和(全局)变量在不同的名字空间中,例如 true 和 $TRUE 是不同的。

如果使用了一个未定义的常量,则会抛出 Error。 在 PHP 8.0.0 之前,调用未定义的常量会被解释为一个该常量的字符串,即(CONSTANT 对应 “CONSTANT” )。 此方法已在 PHP 7.2.0 中被废弃,会抛出一个 E_WARNING 级错误。(PHP 7.2.0 之前会发出一个 E_NOTICE 级的错误。)这不适用于 (完全)限定的常量,如果未定义,将始终引发 Error 。

注意:如果要检查是否定义了某常量,请使用 defined() 函数。

常量和变量有如下不同:

  • 常量前面没有美元符号($);
  • 常量可以不用理会变量的作用域而在任何地方定义和访问;
  • 常量一旦定义就不能被重新定义或者取消定义;
  • 常量只能计算标量值或数组。

示例 :定义常量

<?php
define("CONSTANT", "Hello world.");
echo CONSTANT; // 输出 "Hello world."
echo Constant; // 抛出错误:未定义的常量 "Constant"
// 在 PHP 8.0.0 之前,输出 "Constant" 并发出一个提示级别错误信息
?>

示例 :使用关键字 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 语句之内用 const 来定义常量。

二、预定义常量

PHP 向它运行的任何脚本提供了大量的预定义常量,不过很多常量都是由不同的扩展库定义的,只有在加载了这些扩展库时才会出现,或者动态加载后,或者在编译时已经包括进去了。

三、魔术常量

有九个魔术常量它们的值随着它们在代码中的位置改变而改变。例如 __LINE__ 的值就依赖于它在脚本中所处的行来决定。这些特殊的常量不区分大小写,如下:

PHP 的魔术常量

PHP常量

  • 广告合作

  • QQ群号:707632017

温馨提示:
1、本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。邮箱:2942802716#qq.com(#改为@)。 2、本站原创内容未经允许不得转裁,转载请注明出处“站长百科”和原文地址。
PHP常量
上一篇: PHP变量
PHP常量
下一篇: PHP表达式