【问题标题】:Unified naming scheme issue: SQL column names and PHP array keys casing schemes conflict统一命名方案问题:SQL 列名和 PHP 数组键大小写方案冲突
【发布时间】:2014-04-25 19:54:56
【问题描述】:

在停机期间,我这几天一直在为这个问题摸不着头脑。我并不是很接近实际的解决方案,所以决定在这里发布。我确实找到了这个帖子: PHP/MySQL naming conventions: camelCase vs under_score? 但答案并没有提供前进的方向,尽管关于原因和原因的信息非常丰富。如果重新发布类似问题是不礼貌的行为,请原谅我,并理解这个问题是专门针对数组索引的。

因此,我试图设计一个跨 PHP、SQL 和 JS 的相当统一的命名/大小写方案,以供开发人员团队遵守,这样我们就可以一起愉快地生活。面向对象的 PHP 通常使用 camelCase 和 PascalCase 的混合来编写,关于尚未原生命名的事物。因此,我正在考虑使 PHP 中的所有内容都使用 camelCase 和 Pascal 大小写规范(这不是天真的命名)。这将包括类、对象、方法、变量名,最值得注意的是关联数组键名。但是,我发现自己遇到了这样的问题:SQL 列名通常(并且据我了解是出于良好的技术原因)使用 snake_case 命名。

现在,当我们获取记录集时会发生什么?

$records = DB::fetchAll('SELECT * FROM reco_user');
echo $records[0]['user_name'];
echo $records[0]['date_registered'];

众所周知的比赛场地是锯齿状和随机的!我们有不符合我们的 camelCase 数组键方案的 snake_cased 数组键。

我曾考虑过调整我的方案,使用 camelCase 作为变量名,使用 snake_case 作为键名,但我希望它们不相互对立,因为有时变量名和索引名用于相互通知。

我正在考虑创建一个函数来将所有数组键转换为 camelCase。但是,我担心这可能会被认为是“矫枉过正”,并且其他开发人员不会总是使用它。我还担心这会降低网站速度(特别是对于大型查询),因为每个查询都会有这个额外的数组键转换操作。

这有点痛苦,因为我认为 camelCase 可以很好地适用于 PHP 中的所有其他内容、JS 中的所有内容以及 CSS 中的所有内容。正是返回 SQL 记录的这一方面导致该方案如此接近但到目前为止。

请告诉我你的想法。非常感谢。

【问题讨论】:

    标签: php mysql sql arrays key


    【解决方案1】:

    为什么 SQL 列名是蛇形大小写而其他数组键是驼峰形大小写很重要?因为他们看起来不一样?它们代表具有自己约定的不同类型的对象,这些差异应该可以帮助您检测code smells。所以当我遇到...

    $user->name = $row['user_name'];
    

    ...我知道我很可能会看到数据库中的数据被分配给一个对象,所以如果那条线上有什么问题,我的第一反应应该是确认 $row 是一个来自的数组数据库。现在,如果我看到...

    $user->name = $data['userName'];
    

    ... 这意味着某个对象正在填充该数据,因此我需要开始在代码中的不同位置查找数据以找出数据的设置位置。是的,最终它只是由编译器解析的 ASCII 文本,因此您可以随意命名并使用所需的任何大小写,然后调试您的方式来找出数据的来源,但坚持这些约定应该有助于新的开发人员更轻松地浏览不熟悉的代码库。

    如果您要求所有的大小写都相同,实际上会增加导航代码的难度,并且更容易忘记应用程序中的数据流和逻辑,而没有所有这些不同大小写的提醒。

    【讨论】:

      猜你喜欢
      • 2010-09-17
      • 1970-01-01
      • 2011-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-14
      • 1970-01-01
      相关资源
      最近更新 更多