找到了一个原因 PHP 为什么用下划线命名字段

有时前端问我,为什么你们php 的参数都是下划线的,感觉很不规范啊,你看(Java)其他人的都是驼峰命名。

我不管,php 是世界上最好的语言

其实这个问题好像,入行以来都是用下划线的,但是说出一个原因我也说不出来, 今天我遇到了一个比较好解释这种命名的一种,如果有更清楚的小伙伴欢迎留言。

laravel getXXXAttribute 修改器无效

场景是我爬取亚马逊接口,亚马逊的命名都是驼峰命名,比如:ProductDetail

于是我数据中的字段 为:ProductDetail

然后我想用修改器对这个字段进行修改,在相应的model设置:

    public function getProductDetailAttribute($extra)
    {
        return json_decode($extra, true);
    }

但是我无论怎么试,就是不行。于是我好好看了一下源码的修改器

laravel getXXXAttribute 对于数据库字段全驼峰命名无效

HasAttributes.php
是修改器的核心,通过正则筛选,当前模型中有多少个符合修改器的条件。

    protected static function getMutatorMethods($class)
    {

        preg_match_all('/(?<=^|;)get([^;]+?)Attribute(;|$)/', implode(';', get_class_methods($class)), $matches);

        return $matches[1];
    }

匹配出了ProductDetai字段,符合修改器条件的。

接着,看到一个操作,至关重要


  public static function cacheMutatedAttributes($class)
    {
        static::$mutatorCache[$class] = collect(static::getMutatorMethods($class))->map(function ($match) {
            return lcfirst(static::$snakeAttributes ? Str::snake($match) : $match);
        })->all();
    }

也就是把 ProductDetai 转化成了 product_detail

然后再从attributes 去匹配相应的字段,结果没有找到,故不会走上面定义的方法。

就这样被屈服了,然后我把数据库的字段,转为product_detail解决问题。

所以命名规范,还是很重要的。

laravel 用的人多,这个算一个php 为什么用下划线命名的原因吗?

和我做朋友?

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 5

啊?你一直都用的下划线吗? 我用的小驼峰

然后你应该了解一下psr规范,里面说了下划线或者驼峰都可以,但是要在项目范围内一直沿用一种风格。
你爱用下划线就用下划线,项目里只用下划线,就是规范的。

5年前 评论
liaosp (楼主) 5年前
L学习不停 (作者) 5年前
liaosp (楼主) 5年前
L学习不停 (作者) 5年前
liaosp (楼主) 5年前
aab

这个其实就是和数据库保持了一致.

5年前 评论

这不是你数据库字段命名的原因?

5年前 评论
liaosp (楼主) 5年前

约定大于配置

5年前 评论

鲁迅:世上本无路,只是走的人多了,也就成了路。

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
未填写
文章
38
粉丝
16
喜欢
144
收藏
133
排名:320
访问:3.0 万
私信
所有博文
社区赞助商