找到了一个原因 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 协议》,转载必须注明作者和本文链接
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 5

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

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

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

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

4年前 评论

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

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

约定大于配置

4年前 评论

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

4年前 评论

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