在PHP中,常量是程序运行过程中不可修改的值,通常用来存储配置信息、固定参数等内容,掌握常量的获取和判断方法是PHP开发的基础技能,其中defined和constant是两个核心相关函数。

PHP常量的基本定义
在使用defined和constant函数之前,首先需要了解PHP常量的定义方式,最常用的是define()函数,语法为define(string $name, mixed $value, bool $case_insensitive = false),其中$name是常量名称,$value是常量值,$case_insensitive表示是否大小写不敏感,默认false表示大小写敏感。
也可以通过const关键字定义常量,不过const只能在全局作用域或者类中使用,不能在条件语句、函数内部等地方使用,而define没有这个限制。
defined函数用法详解
defined函数的作用是检查某个常量是否已经定义,它的语法非常简单:defined(string $name): bool,接收一个常量名称字符串作为参数,如果常量已经定义则返回true,否则返回false。
需要注意的是,defined函数的参数必须是常量的名称字符串,不能直接传入常量本身,比如判断常量APP_NAME是否定义,应该传入'APP_NAME'而不是APP_NAME。
下面是一个使用defined函数的示例:
<?php
// 先定义一个常量
define('APP_NAME', 'MyPHPApp');
// 检查常量是否定义
if (defined('APP_NAME')) {
echo 'APP_NAME常量已定义';
} else {
echo 'APP_NAME常量未定义';
}
// 检查未定义的常量
if (defined('APP_VERSION')) {
echo 'APP_VERSION常量已定义';
} else {
echo 'APP_VERSION常量未定义';
}
?>
constant函数用法详解
constant函数的作用是获取指定常量的值,它的语法为:constant(string $name): mixed,接收一个常量名称字符串作为参数,返回该常量的值,如果常量未定义则会抛出错误。
constant函数最大的优势是支持动态获取常量值,也就是常量名称可以是变量,这在需要根据不同条件获取不同常量的场景下非常有用,而直接使用常量名取值的方式无法做到动态。
下面是constant函数的基础使用示例:
<?php
// 定义两个常量
define('SITE_NAME', '技术博客');
define('SITE_URL', 'https://ipipp.com');
// 直接获取常量值
echo constant('SITE_NAME'); // 输出 技术博客
echo constant('SITE_URL'); // 输出 https://ipipp.com
// 动态获取常量值
$constName = 'SITE_NAME';
echo constant($constName); // 输出 技术博客
?>
defined与constant的区别对比
很多开发者会混淆这两个函数的用途,下面通过表格对比两者的核心差异:
| 对比项 | defined | constant |
|---|---|---|
| 核心作用 | 检查常量是否已定义 | 获取已定义常量的值 |
| 返回值 | 布尔值true或false | 常量的值,未定义则报错 |
| 参数要求 | 常量名称字符串 | 常量名称字符串 |
| 动态支持 | 支持传入变量作为常量名 | 支持传入变量作为常量名 |
实际开发中的使用建议
在实际开发中,如果需要先判断常量是否存在再获取值,建议先使用defined检查,再使用constant获取,避免出现未定义常量的报错:
<?php
define('MAX_UPLOAD_SIZE', 2048);
$constName = 'MAX_UPLOAD_SIZE';
if (defined($constName)) {
$value = constant($constName);
echo '最大上传大小为:' . $value . 'KB';
} else {
echo '未定义最大上传大小常量';
}
?>
如果已经确定常量一定存在,也可以直接使用常量名取值,比如echo MAX_UPLOAD_SIZE;,这种方式比constant函数更简洁,但不支持动态场景。
注意事项
- 常量名称默认大小写敏感,所以defined和constant函数的参数需要和定义时的名称大小写一致,除非定义时设置了大小写不敏感。
- 不要将defined函数用于判断变量是否存在,判断变量应该用
isset()函数,两者的作用对象完全不同。 - 如果使用constant函数获取未定义的常量,PHP会抛出警告级别的错误,实际开发中要做好前置判断。