Für weniger Schreien im Code
Der Nette Coding Style erfährt eine kleine Anpassung: Für Klassenkonstanten wird neu die PascalCase-Notation anstelle der ursprünglichen SCREAMING_SNAKE_CASE verwendet.

Die Tradition der Verwendung von Großbuchstaben für Konstanten stammt aus der Sprache C, wo damit sogenannte Makrokonstanten des Präprozessors gekennzeichnet wurden. Es war nützlich, den Code für den Parser unübersehbar vom Code für den Präprozessor zu unterscheiden. PHP benötigt diese Unterscheidung nicht, da es keinen Präprozessor hat. Im Gegenteil, die übermäßige Hervorhebung von Konstanten ist kontraproduktiv. Warum sollte eine Konstante schreien und auf sich aufmerksam machen, ein hervorstechendes Element im Programmfluss sein? Es gibt keinen Grund dafür.
Beispiel für realen Code mit SCREAMING_SNAKE_CASE-Konstanten, die aggressiv aus dem Code herausstechen und auch schlechter zu lesen sind:
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;
}
}
Beispiel desselben Codes mit PascalCase-Konstanten, der wesentlich kompakter wirkt:
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;
}
}
Kompatibilität
Nette achtet selbstverständlich auf Abwärtskompatibilität. Alle
öffentlichen Konstanten bleiben weiterhin auch in der ursprünglichen Form
erhalten und dienen als Aliase für die bevorzugten PascalCase-Konstanten. Sie
werden auch in der nächsten Major-Version existieren und das
@deprecated
-Flag tragen.
Alle neu hinzugefügten Klassenkonstanten gibt es nur noch in der PascalCase-Variante. Globale Konstanten verwendet Nette nicht.
Enumerations
PHP 8.1 bringt Enum-Typen, die eines Tages auch in Nette verwendet werden. Früher wurden Enums mithilfe von Konstanten nachgebildet. Die PHP-Dokumentation selbst verwendet für “enum cases” die PascalCase-Notation, ebenso PHP-FIG oder die frühere experimentelle Implementierung SplEnum.
Enums sind im Grunde syntaktischer Zucker für Konstanten, aus PHP-Sicht gibt es keinen Unterschied zwischen einem „enum case“ und einer Klassenkonstante. Daher würde die Kombination von PascalCase-Enums und SCREAMING_SNAKE_CASE-Konstanten inkonsistent aussehen, was ein weiterer Grund für die Änderung des Schreibstils von Konstanten ist.
Wie ändert man den eigenen Code?
Jede kosmetische Änderung löst immer viel Unmut aus. Aber wenn Sie
versuchen, einen Monat lang PascalCase-Konstanten zu verwenden, werden Sie
begeistert sein und es wird kein Zurück mehr geben. Und Sie werden die neue
Notation auch in Ihrem eigenen Code einführen wollen. Wie geht das? Der ideale
Weg ist, die Konstanten in PhpStorm mit der Funktion
Refactor > Rename
umzubenennen. Installieren Sie auch das Plugin
String
Manipulation und weisen Sie ihm in den Einstellungen eine Tastenkombination
für Switch Case > To Pascal Case
zu.
Dann genügt es, den Cursor auf die Konstante zu setzen, Strg-F6
(rename) und anschließend die Tastenkombination für
To Pascal Case
zu drücken, und PhpStorm ändert die Konstante im
gesamten Projekt.
Happy coding!
Um einen Kommentar abzugeben, loggen Sie sich bitte ein