Соглашения об именах PHP/MySQL: camelCase vs under_score?

Довольно часто в коде модели PHP (по крайней мере, в моем собственном таком коде) есть прямые ссылки на имена таблиц и полей MySQL, а так как идентификаторы MySQL в большинстве случаев не учитывают регистр, я обычно использую соглашение об именах under_score, чтобы сделать эти идентификаторы более читабельны.

В то же время, похоже, большинство людей используют соглашения camelCase, когда они создают библиотеки классов PHP, и я тоже пытался это сделать.

Кроме того, встроенные функции PHP сами по себе непоследовательны. Некоторые из них используют camelCase, другие используют under_scores, а другие используют имена C-стиля (например, strtolower).

В результате код имеет тенденцию быть гораздо менее читабельным, чем я предпочитаю, что со смешанными соглашениями об именах в camelCase, under_score и C-стиле, которые находятся рядом друг с другом в коде.

Как другие люди справляются с этим? Возможно, каким-то образом люди обнаружили, что они организовали свою работу так, что разные соглашения об именах, как правило, не так близки друг к другу? Или, возможно, есть библиотеки классов, которые при правильном использовании имеют тенденцию делать вещи чище? Я знаю, что эти обсуждения стиля могут нагреться - не нужно туда идти, только некоторые практические предложения, пожалуйста!

Ответ 1

Как говорит Тереско, имена MySQL чувствительны к регистру на платформах * NIX и нечувствительны к Windows. Если вы разрабатываете код для поддержки обоих (как и я), то смешение ваших случаев может привести к огромным головным болям: например, сбросить базу данных в Windows и восстановить ее на * NIX, и все ваши случаи будут потеряны. На самом деле нам пришлось клонировать код для обнаружения и исправления случаев в дампе именно по этой причине.

Если вы свободны от Windows, хотя на самом деле не важно, что вы используете, до тех пор, пока вы держите его согласованным.

Ответ 2

Когда дело доходит до моделей и таблиц базы данных, вы можете использовать:

  • CamelCase для имен моделей,
  • множественная форма вашего имени модели для таблицы базы данных (с последовательными нижними/верхними частями, например, "camelcases" ),
  • имена таблиц в алфавитном порядке, разделенные символом подчеркивания (например, "camels_cases" - это таблица соединений между "случаями" и "верблюдами" ),

Для классов я обычно использовал CamelCases (начиная с верхнего регистра) и camelCases для методов (начиная с нижних регистров).

Но, на самом деле, важно то, что это согласованность и удобочитаемость. Может быть хорошей идеей следовать соглашениям об именах некоторых из хорошо известных и широко реализованных фреймворков, таких как Zend Framework (в этом документе приведены довольно точные рекомендации в отношении стандарта кодирования), но, например, Кохана также может быть хорошей идеей. Переосмыслить колесо может не быть лучшей идеей;)