PHP代码风格关键在于上下文统一而非个人喜好:函数变量用snake_case,类方法用PascalCase,运算符两侧加空格,分号不可省略,注释须解决理解缺口,团队应共用.php-cs-fixer.php配置确保一致。
PHP代码风格不是靠“背规范”学会的,而是靠在写每行代码时做具体判断——比如该不该加空格、函数名用下划线还是驼峰、
后面要不要空格。学得快的人,往往从第一天就注意这些细节,而不是等项目出问题才回头改。
怎么判断该用下划线还是驼峰?看上下文,不是看喜好
PHP本身不强制风格,但实际项目里混用会直接导致协作卡壳。关键不是“哪种更好”,而是“在哪种场景下必须统一”:
函数名和变量名:社区主流(包括PSR-12、Laravel、WordPress核心)都用
,比如
、
;硬要写
在纯自用脚本里没问题,但一旦接入Composer包或团队CI,
大概率报错
类名和方法名:必须
,这是PSR-1硬性要求,
合法,
直接被自动加载器忽略
私有属性/方法:前缀
是约定,不是语法,
和
能运行,但现代PHP更倾向用
修饰符+标准命名,靠IDE和静态分析识别作用域
分号、换行、空格——哪些能省,哪些不能碰?
PHP对空白宽容,但宽容不等于随意。几个高频翻车点:
分号:除了
前可省略,其他所有语句结尾必须有
。漏写
不会报错,但可能让下一行代码变成上一行的参数,比如
实际被解析成
(
是非法变量名)
换行:多行
块必须换行缩进,但
后不能空行——
会在HTTP头之后多输出一个空行,破坏JSON响应
空格:运算符两侧必须空格(
),但函数调用括号内不强制(
和
都合法,PSR-12推荐前者)
注释写不写、怎么写,取决于“谁会读这段代码”
注释不是越多越好,而是解决“不看注释就无法理解意图”的缺口:
PHP 8.5.5
PHP 8.5.5 是 PHP 8.5 分支的维护更新版本。该版本延续了“小步快跑”的迭代逻辑,通过深度错误修复、底层性能微调以及安全加固,旨在为开发者提供一个更健壮、更高效的运行环境。该版本严格遵守语义化版本规范,不包含破坏性变更。
下载
立即学习
“
PHP免费学习笔记(深入)
”;
不用解释语法:
这种注释纯属占地方,
自己已经说得很清楚
要说明异常路径:
比
有用十倍
TODO/FIXME必须带责任人和时间:
,否则三年后还在TODO列表里躺着
生成文档的注释(如
)只在需要类型提示时加,盲目补全
反而让IDE误判
为什么本地格式化了,上线还是被CI拒绝?
因为格式化工具配置和团队规则不一致。最常见三类脱节:
用了
规则集,但团队实际执行的是自定义规则(比如强制
不换行)
编辑器保存时自动删末尾空格,但
显示修改了整行——其实是行尾换行符从
变
,Windows和Linux混用环境尤其明显
VS Code装了PHP Intelephense插件,它默认按PSR-12格式化,但项目根目录没放
配置文件,导致本地和CI跑的规则版本不同
真正省事的做法:把团队的
文件放进项目根目录,所有人用同一份配置,而不是靠记忆“应该怎样”。风格争议永远存在,但机器规则不会吵架。
echosnake_caseget_user_meta$post_idgetUserMetaphpcsPascalCaseclass DatabaseConnectionclass database_connection_$_cache_init()private?>;;$a = 1 $b = 2$a = 1$b = 21$bifreturnreturn $data;\n\n}$a + $bstrlen($str)strlen( $str )// 将$name赋值为字符串"admin"$name = "admin";// 当数据库连接超时时返回null,由上层处理重试逻辑// 数据库操作// TODO(john, 2026-06): 替换过时的mysql_connect()为PDO/** @var User $user */@paramphp-cs-fixer@PSR12elseifgit diff\r\n\n.php-cs-fixer.php.php-cs-fixer.php