php中定义常量用define()函数或const关键字,变量以$开头可变,常量不可修改且无$符号;二者命名、作用域、类型及检测方式均不同。

在PHP编程中,变量和常量是两种基础的数据标识符,它们的定义方式、作用域及可变性存在本质差异。以下是关于PHP中如何定义常量,以及变量与常量核心区别的详细说明:
一、PHP中定义常量的两种方法
PHP提供两种语法定义常量:使用define()函数或const关键字。二者均创建不可修改的标量值,但适用场景和限制不同。
1、使用define()函数定义常量:
该函数支持动态名称和表达式,可在任何作用域(包括条件分支内)调用。
2、使用const关键字定义常量:
语法更简洁,但仅允许在编译期确定的静态上下文中使用,如全局作用域或类内部。
立即学习“PHP免费学习笔记(深入)”;
3、定义类常量时必须使用const关键字:
类常量默认为public,不可使用define()在类中声明。
二、变量定义方式及特征
PHP变量以美元符号$开头,无需预先声明类型,赋值即创建,且可随时重新赋值或改变数据类型。
1、声明并初始化变量:
$name = "张三";
2、变量名区分大小写:
$count与$Count被视为两个独立变量。
3、变量可引用其他变量:
$a = 10; $b = &$a; 此时$b是$a的引用,修改$b会影响$a的值。
三、变量与常量的本质区别
变量存储的是可变数据,其值和内存地址在运行时可被多次覆盖;而常量一旦定义,其值在脚本执行期间完全不可更改,且不以$符号开头。
1、命名规则差异:
变量名必须以字母或下划线开头,后续可含字母、数字、下划线;常量名默认全大写(约定俗成),允许数字但不推荐以下划线开头。
2、作用域行为不同:
变量遵循函数作用域、全局作用域等规则;常量(除const类常量外)默认为全局作用域,不受函数边界限制。
3、数据类型限制:
变量可存储任意类型(null、array、object等);传统define()和const仅支持标量(boolean、integer、float、string)及null(PHP 7.4+支持null)。
四、检测变量与常量是否已定义
判断标识符是否存在需使用不同函数:变量用isset()或empty(),常量用defined(),二者不可混用。
1、检查变量是否已设置且非null:
if (isset($username)) { echo "变量已定义"; }
2、检查常量是否已定义:
if (defined('MAX_LOGIN_ATTEMPTS')) { echo "常量已定义"; }
3、尝试访问未定义变量会触发Notice警告;访问未定义常量则触发Fatal error,导致脚本立即终止。
五、常量的高级用法:魔术常量与系统常量
PHP内置若干预定义“魔术常量”,其值随代码位置变化而自动更新,例如__LINE__、__FILE__;另有大量系统常量如PHP_VERSION、DIRECTORY_SEPARATOR,由扩展或核心自动注册。
1、魔术常量不可被define()或const重新定义:
试图重定义__FILE__将被忽略,且不报错。
2、获取所有已定义常量列表:
使用get_defined_constants(true)可按类别(Core、date、pcre等)返回多维数组。
3、区分大小写的常量定义:
define('API_URL', 'https://api.example.com', true); 第三个参数设为true后,defined('api_url')也将返回true。











