php代码风格关键在于上下文统一而非个人喜好:函数变量用snake_case,类方法用pascalcase,运算符两侧加空格,分号不可省略,注释须解决理解缺口,团队应共用.php-cs-fixer.php配置确保一致。

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











