php变量名、数组键、对象属性名、常量名严格区分大小写,$name与$name不同;函数和类名不区分大小写但不推荐混用;true、false、null应全大写;json键名大小写需与原始响应一致。

PHP变量名严格区分大小写
是的,$name 和 $Name 是两个完全不同的变量,PHP 会把它们当成独立存在。这不是“有时区分”,而是语言层面的硬性规则——从解析器读取变量符号那一刻就已确定。
函数、类、关键字不区分大小写(但别依赖)
你写 echo、ECHO 或 EcHo 都能运行;strlen() 写成 STRLEN() 也没问题。但这只是语法允许,并不代表推荐——实际项目中混用大小写会让代码难以维护,IDE 也常因此无法正确跳转或提示。
- 类名在
autoload场景下可能因文件系统大小写敏感性出问题(比如 Linux 下class User对应User.php,但写成user.php就加载失败) -
TRUE、false、NULL这些常量虽不区分大小写,但 PHP 官方文档和 PSR 规范强制要求全大写,否则静态分析工具(如 PHPStan)会报NonCanonicalFqcn类警告
数组键和对象属性名区分大小写
这最容易被忽略:数组键是字符串,而 PHP 字符串天然区分大小写;对象属性同样遵循变量命名规则。
常见错误现象:$user['email'] 返回 null,但打印 array_keys($user) 发现实际是 ['Email'];或者调用 $obj->ID 报 Notice: Undefined property,其实属性是 $obj->id。
立即学习“PHP免费学习笔记(深入)”;
- API 返回的 JSON 数据映射到 PHP 数组后,字段名大小写必须与原始响应严格一致
- 使用
json_decode($json, true)得到关联数组时,键名继承 JSON 原始大小写,不能假设自动转小写 - 对象属性若来自
stdClass动态赋值,$obj->Name和$obj->name完全不互通
常量定义后不可修改,且区分大小写
define('DEBUG', true) 定义后,debug、Debug、DEBUG 中只有最后一个有效。注意:const DEBUG = true; 同样区分大小写,且作用域更严格(类内 const 必须用 self::DEBUG 访问)。
容易踩的坑:
- 用
defined('debug')检查永远返回false,因为定义的是'DEBUG' - 第三方库可能用
__NAMESPACE__拼接常量名,此时大小写错一个字母就会导致Class 'XXX' not found -
get_defined_constants(true)返回的数组里,键是扩展名(如'Core'),值才是常量集合——这些值本身仍区分大小写










