php变量名必须以$加字母或下划线开头,仅允许$a、$_a、$a三种合法起始;需避让超全局变量、内置函数名及$this;驼峰命名为主流,动态变量$$须严格校验键名安全性。

PHP变量名必须以美元符和字母或下划线开头
PHP解析器在词法分析阶段就强制要求变量标识符的格式,$123abc、$var-name、$var name 全部语法错误,会直接报 Parse error: syntax error, unexpected token。真正合法的起始组合只有三种:$a、$_a、$A——注意大小写敏感,$myVar 和 $myvar 是两个不同变量。
驼峰命名(camelCase)是主流但非强制
PHP本身不限制命名风格,但社区约定和主流框架(Laravel、Symfony)默认采用小驼峰:$userName、$isActive。下划线分隔($user_name)在老项目或PEAR规范中还能见到,但新项目基本避免——尤其当混用函数式写法时,get_user_data() 和 $user_data 容易视觉混淆。关键不是“能不能用”,而是“会不会被队友删掉”。
避免与超全局变量、内置函数名冲突
这类命名看似合法,实则埋雷:
-
$GLOBALS、$_POST:覆盖后导致整个请求数据丢失,且无任何警告 -
$echo、$strlen:虽然不报错,但后续调用echo $echo会触发“Cannot use 'echo' as a variable”致命错误 -
$this:类方法内直接赋值会报Fatal error: Cannot re-assign $this
判断是否安全的方法很简单:在变量名前加 is_callable() 或查 PHP 手册的“Reserved Keywords”列表,但更省事的是——别碰所有全大写、带下划线、或和常见函数同名的组合。
动态变量名($$)要格外小心作用域和类型
像 $$name 这种写法实际是“变量的变量”,它依赖运行时值解析,极易出错:
- 如果
$name = null,$$name等价于$null,而$null是合法变量名(PHP 不校验变量名是否为关键词),结果完全不可控 - 在函数内使用
$$name时,若$name指向外部变量,而该变量未用global声明,则访问不到 - JSON 解码后用
$$key赋值?先确保$key是字符串且经过preg_match('/^[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*$/', $key)校验,否则可能执行任意变量引用
绝大多数场景下,数组或对象属性访问($data[$key] 或 $obj->$key)比 $$key 更安全、更易调试。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











