php变量名必须以$加字母或下划线开头,禁用数字、特殊符号及保留字,区分大小写,仅支持ascii字母、数字和下划线,避免覆盖超全局变量,推荐小驼峰命名且语义明确。

变量名不能是保留关键字或超全局变量名
PHP 会直接报错或静默失败,比如用 $true、$self、$parent 做变量名,解析时会被当作语言结构处理;更隐蔽的是覆盖 $_POST、$GLOBALS——写 $_POST = [] 看似只是清空数组,实际会让后续所有 $_POST['xxx'] 取不到原始请求数据。
判断方法很简单:查 PHP 官方手册的 Reserved Keywords 列表,只要在里面,就绝对不能用作变量名;超全局变量名($_GET、$_SESSION 等)也同理,不建议重定义。
命名要语义清晰,不用缩写,区分作用域前缀
PSR-12 不强制要求前缀,但团队协作中加前缀能快速识别变量生命周期和用途。比如:
-
$userEmail比$email更明确——它属于用户实体,不是任意邮箱字符串 - 静态变量用
$sRetryCount,局部临时变量用$_tmpResult,全局配置用$gApiTimeout - 避免
$id这类裸名,优先用$userId、$postId;$url改为$redirectUrl或$avatarUrl
缩写只接受广泛共识的,如 $id、$uri、$msg;$cnt、$usr、$cfg 这类自造缩写在 PSR 场景下等于放弃可读性。
大小写与分隔符必须统一:小驼峰是主流,下划线仅限特定场景
PSR-12 明确规定:类名用大驼峰(UserRepository),方法和变量用小驼峰(findActiveUsers、$lastLoginTime)。下划线命名($user_name)在 PSR 中不被推荐,仅允许出现在:
- 常量名:
MAX_RETRY_COUNT、DB_HOST - 配置键名(非变量):
url_route_on、log_level - 数据库字段映射(如 ThinkPHP 的
$table->user_name)
混用风格最常出现在老项目迁移中:有人把 $base_dir 直接当变量名用,结果在 PSR-12 检查下被标红;正确做法是统一转成 $baseDir。
注意 Unicode 和不可见字符带来的隐性风险
PHP 允许中文、全角符号甚至零宽空格作为变量名(如 $用户名、$i站点is),但这会导致 IDE 无法识别、Git diff 失效、CI 工具报错,且违反 PSR-1 “使用标准计算机英文”的基本前提。
容易被忽略的点:
- 复制粘贴代码时带入不可见 Unicode 字符(如
\u200b),变量看着像$data,实际是$data\u200b,调试时完全对不上 - 编辑器编码设为 UTF-8-BOM,可能让
$config开头多一个 BOM 字节,导致解析失败 - CI 流水线用不同 locale(如
en_US.UTF-8vszh_CN.UTF-8)时,某些字节序列行为不一致
最稳妥的做法:只用 ASCII 字母 + 数字 + 下划线,且确保首字符不是数字或下划线($1var、$_internal 虽语法合法,但易混淆,PSR 场景下应避免)。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











