0

0

PHP常量和变量有什么区别_PHP常量与变量差异【对比】

絕刀狂花

絕刀狂花

发布时间:2026-02-26 19:43:19

|

458人浏览过

|

来源于php中文网

原创

常量不可修改且全局可见,变量可变且作用域受限;常量无$符号、定义后不可撤销,变量必须带$、可随时重赋值;常量用于固定配置,变量用于动态数据。

php常量和变量有什么区别_php常量与变量差异【对比】

常量不能改,变量随时能变

这是最根本的差异:一旦 define('DB_HOST', 'localhost')const VERSION = '2.4.1' 执行成功,这个值在脚本生命周期内就锁死了;而 $db_host = 'localhost' 后还能写 $db_host = '127.0.0.1' —— 不报错,但可能悄悄破坏逻辑。

  • 常见错误现象:把配置项写成变量(比如 $API_TIMEOUT = 5000),结果在某个函数里被意外覆盖,调试时发现超时时间突然变了
  • 使用场景:数据库连接参数、API 版本号、状态码映射(如 const STATUS_ACTIVE = 1)这类不该动的值,必须用常量
  • 注意:define()const 都不可逆,PHP 不提供 undefine()unset_const() —— 别指望“取消定义”来补救

常量没有 $,变量必须带 $

这不是命名习惯问题,是语法铁律:DB_NAME 是合法常量名,$DB_NAME 就是另一个变量;漏掉 $ 写成 echo DB_NAME 能运行,但写成 echo $DB_NAME 却报 Notice: Undefined variable —— 因为它们压根不是同一个东西。

  • 常见错误现象:复制粘贴变量代码时忘了删 $,或手抖多打了 $,导致读到空值或触发 notice
  • 参数差异:define() 第一个参数是字符串('DB_NAME'),const 直接写标识符(const DB_NAME = ...),别混用
  • 性能影响:常量不经过符号表查找,直接解析,所以 echo SITE_URLecho $site_url 略快——但微乎其微,别为这点性能牺牲可读性

作用域完全不同:常量全局可见,变量看位置

在函数里 define('CACHE_TTL', 3600),外面照样能用 CACHE_TTL;但函数里声明的 $cache_ttl = 3600,出了函数就彻底失效。

Replit Agent
Replit Agent

Replit最新推出的AI编程工具,可以帮助用户从零开始自动构建应用程序。

下载
  • 常见错误现象:在类方法里用 $this->config['timeout'] 读配置,却忘了这个变量只在当前方法有效,下个方法就得重新赋值
  • 使用场景:跨模块共享的开关(如 DEBUG_MODE)、项目级路径(ROOT_DIR)必须用常量,否则得靠全局变量或单例——更麻烦还易污染
  • 注意:const 在类中定义的是类常量(Login::TRIES),它属于类作用域,不是“函数内定义就仅限函数内”,这点和 define() 的全局性不同

值类型限制:常量曾只支持标量,现在能存数组但有坑

PHP 5.6 开始支持 define('ROLES', ['admin' => 1, 'user' => 2]),PHP 7+ 还允许 const ROLES = ['admin' => 1] —— 但别高兴太早。

立即学习PHP免费学习笔记(深入)”;

  • 常见错误现象:用 define() 定义数组常量后,在 PHP 5.5 或更老环境直接报错;或者误以为对象也能当常量值(define('LOGGER', new Logger())),PHP 会拒绝
  • 兼容性影响:如果项目需支持 PHP define()(PHP 5.6+),const 数组只在 PHP 7.0+ 支持
  • 容易被忽略的地方:即使 PHP 8.0+ 允许 const CONFIG = ['host' => DB_HOST] 这种带常量表达式的写法,但 DB_HOST 本身必须已定义——顺序不能错,否则 fatal error
事情说清了就结束。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1560

2023.10.24

typedef和define区别
typedef和define区别

typedef和define区别在类型检查、作用范围、可读性、错误处理和内存占用等。本专题为大家提供typedef和define相关的文章、下载、课程内容,供大家免费下载体验。

117

2023.09.26

define的用法
define的用法

define用法:1、定义常量;2、定义函数宏:3、定义条件编译;4、定义多行宏。更多关于define的用法的内容,大家可以阅读本专题下的文章。

359

2023.10.11

scripterror怎么解决
scripterror怎么解决

scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

391

2023.10.18

500error怎么解决
500error怎么解决

500error的解决办法有检查服务器日志、检查代码、检查服务器配置、更新软件版本、重新启动服务、调试代码和寻求帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

348

2023.10.25

mysql标识符无效错误怎么解决
mysql标识符无效错误怎么解决

mysql标识符无效错误的解决办法:1、检查标识符是否被其他表或数据库使用;2、检查标识符是否包含特殊字符;3、使用引号包裹标识符;4、使用反引号包裹标识符;5、检查MySQL的配置文件等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

198

2023.12.04

Python标识符有哪些
Python标识符有哪些

Python标识符有变量标识符、函数标识符、类标识符、模块标识符、下划线开头的标识符、双下划线开头、双下划线结尾的标识符、整型标识符、浮点型标识符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

310

2024.02.23

java标识符合集
java标识符合集

本专题整合了java标识符相关内容,想了解更多详细内容,请阅读下面的文章。

287

2025.06.11

Golang 实际项目案例:从需求到上线
Golang 实际项目案例:从需求到上线

《Golang 实际项目案例:从需求到上线》以真实业务场景为主线,完整覆盖需求分析、架构设计、模块拆分、编码实现、性能优化与部署上线全过程,强调工程规范与实践决策,帮助开发者打通从技术实现到系统交付的关键路径,提升独立完成 Go 项目的综合能力。

1

2026.02.26

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 12.5万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 11.3万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号