php方法名必须用小驼峰(camelcase),因psr-1强制规定、自动加载与反射依赖该格式、静态分析工具报错、框架机制(如laravel访问器)不识别下划线,且魔法方法(如__construct)属例外,私有/静态/抽象方法均须遵守。

PHP方法名必须用小驼峰(camelCase),不能用下划线,也不能用大驼峰或全小写加下划线混搭——这是PSR-1和主流框架(Laravel、Symfony、ThinkPHP8)实际执行的硬性边界。
为什么方法名不能用下划线?
下划线命名(如 get_user_info)在PHP中长期存在,但现代规范已明确将其排除在方法命名之外。PSR-1标准规定:“类的方法名必须使用camelCase”,而下划线命名被保留给函数(非OOP场景)或配置项(如 HTML_CACHE_ON)。混用会破坏自动加载、反射识别和IDE跳转逻辑。
- Composer自动加载器(如PSR-4)默认只识别
getUserInfo这类方法,不解析下划线分隔的调用 - Laravel的Facade、Eloquent动态方法(如
whereHas)依赖小驼峰约定生成代理逻辑 - PHPStan/PHP-CS-Fixer等静态分析工具将
get_user_info视为违规,报错Method name "get_user_info" is not in camel caps format
__toString 和 __construct 算不算例外?
不算例外,它们是魔法方法(magic methods),命名由PHP内核强制定义,不属于“用户自定义方法”的命名范畴。你不能自己造一个 __myCustom 并期望它被自动调用——只有PHP文档明确列出的双下划线方法才有效。所有你自己写的普通方法,包括私有方法(如 validateInput)、静态方法(如 fromArray)、抽象方法(如 handleRequest),都必须走小驼峰。
- 私有方法也得小驼峰:
_formatAge是错的,应为formatAge;下划线开头仅用于属性($userName)或函数(_helper_func),不适用于方法 - 构造方法永远叫
__construct,不能改成init或createInstance—— 否则 new 时不会触发 - 重写父类方法时,签名必须完全一致,包括大小写:
getUserData()不能覆盖getUserData()的父类声明,哪怕只差一个字母大小写
常见错误:从变量/函数习惯直接套到方法上
很多开发者把变量命名规则($user_name)或旧式函数命名(mysql_connect)迁移到方法上,导致 set_user_name 或 GetUserName 这类写法。这类代码在语法上能运行,但会在协作、维护和工具链中持续制造摩擦。
-
GetUserName(大驼峰):违反PSR-1,IDE无法正确索引,PHPMD报CamelCaseMethodName警告 -
set_user_name(下划线):Laravel的模型访问器(accessor)机制不识别,$user->user_name不会触发该方法 -
setusername(全小写无分隔):可读性崩坏,getcurrentuserrolepermissions这种串根本没法快速定位单词边界
真正容易被忽略的是「方法名动词优先」这个隐性规则:小驼峰只是格式,背后要求方法名必须是动词或动词短语(save、calculateTotal、isEmailValid),纯名词(userInfo)或形容词(valid)即使格式对了,也违背语义直觉和框架预期。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











