Чтобы меньше кричать в коде
Стиль кодирования Nette претерпел небольшое изменение: теперь для констант классов используется нотация PascalCase вместо первоначальной SCREAMING_SNAKE_CASE.
Традиция использования заглавных букв для констант пришла из языка Си, где так называемые макроконстанты препроцессора обозначались именно так. Это было полезно, чтобы не упускать из виду различие между кодом парсера и кодом препроцессора. PHP не нуждается в этом различии, поскольку в нем нет препроцессора. С другой стороны, чрезмерное подчеркивание констант контрпродуктивно. Почему константа должна кричать и привлекать к себе внимание, быть заметным элементом в потоке программы? Для этого нет никаких оснований.
Пример реального кода с константами SCREAMING_SNAKE_CASE, которые агрессивно выделяются в коде, а также труднее читаются:
foreach (self::SYMBOL_TO_NAME as $symbol => $name) {
$idx = self::ACTION_BASE[$state] + $symbol;
if (($idx >= 0 && $idx < count(self::ACTION) && self::ACTION_CHECK[$idx] === $symbol
|| $state < self::YY_2_TBLSTATE
&& ($idx = self::ACTION_BASE[$state + self::NUM_NON_LEAF_STATES] + $symbol) >= 0
&& $idx < count(self::ACTION) && self::ACTION_CHECK[$idx] === $symbol)
&& self::ACTION[$idx] !== self::UNEXPECTED_TOKEN_RULE
&& self::ACTION[$idx] !== self::DEFAULT_ACTION
&& $symbol === 0
) {
return true;
}
}
Пример того же кода с константами PascalCase, который выглядит гораздо компактнее:
foreach (self::SymbolToName as $symbol => $name) {
$idx = self::ActionBase[$state] + $symbol;
if (($idx >= 0 && $idx < count(self::Action) && self::ActionCheck[$idx] === $symbol
|| $state < self::Yy2Tblstate
&& ($idx = self::ActionBase[$state + self::NumNonLeafStates] + $symbol) >= 0
&& $idx < count(self::Action) && self::ActionCheck[$idx] === $symbol)
&& self::Action[$idx] !== self::UnexpectedTokenRule
&& self::Action[$idx] !== self::DefaultAction
&& $symbol === 0
) {
return true;
}
}
Совместимость
Nette, конечно же, заботится об обратной
совместимости. Все публичные константы
также остаются в своем первоначальном виде
и служат псевдонимами для предпочтительных
констант PascalCase. Они продолжат свое
существование в следующем основном выпуске
и будут иметь флаг @deprecated
.
Все вновь добавленные константы классов теперь имеют только вариант PascalCase. Глобальные константы не используются Nette.
Перечисления
PHP 8.1 поставляется с перечислениями, которые будут использоваться и в Nette. Перечисления заменят предыдущее решение с использованием констант. Стандарта кодирования для написания перечислений пока не существует, организация PHP-FIG давно потерпела неудачу в этом вопросе, и рекомендации появляются с опозданием на много лет. Сама документация PHP является руководством. Для “случаев перечисления” в ней используется исключительно нотация PascalCase, и это также относится к более ранней экспериментальной реализации SplEnum.
Сочетание перечислений PascalCase с константами SCREAMING_SNAKE_CASE будет выглядеть непоследовательно, так что это тоже причина изменить стиль написания констант.
Техническое примечание: перечисления – это синтаксический сахар для констант, с точки зрения PHP нет никакой разницы между “enum case” и константой класса.
Как изменить собственный код?
Любое косметическое изменение всегда
вызовет массу недовольства. Но если вы
попробуете использовать константы PascalCase в
течение месяца, вы будете в восторге от них,
и пути назад уже не будет. И вы захотите
ввести новую нотацию и в свой собственный
код. Как это сделать? Идеальный способ –
переименовать константы в PhpStorm с помощью
функции Refactor > Rename
. Также
установите плагин String
Manipulation и назначьте ему ярлык в настройках
для Switch Case > To Pascal Case
.
После этого достаточно установить курсор
на константу, нажать Ctrl-F6
(переименовать), а затем ярлык для
To Pascal Case
, и PhpStorm изменит константу во
всем проекте.
Счастливого кодирования!
Чтобы оставить комментарий, пожалуйста, войдите в систему