Pour moins crier dans le code

il y a 2 ans de David Grudl  

Le style de codage de Nette subit une modification mineure : la notation PascalCase est maintenant utilisée pour les constantes de classe au lieu de la notation originale SCREAMING_SNAKE_CASE.

La tradition d'utiliser des majuscules pour les constantes vient du langage C, où les constantes dites macro du préprocesseur étaient désignées comme telles. Il était utile de ne pas négliger la distinction entre le code de l'analyseur et le code du préprocesseur. PHP n'a pas besoin de cette distinction puisqu'il n'a pas de préprocesseur. D'un autre côté, mettre trop l'accent sur les constantes est contre-productif. Pourquoi une constante devrait-elle crier et attirer l'attention sur elle-même, être un élément proéminent dans le déroulement du programme ? Il n'y a aucune raison pour cela.

Exemple de code réel avec des constantes SCREAMING_SNAKE_CASE qui se démarquent agressivement dans le code et sont également plus difficiles à lire :

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;
	}
}

Un exemple du même code avec des constantes PascalCase, qui semble beaucoup plus compact :

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;
	}
}

Compatibilité

Nette est bien sûr attentif à la compatibilité ascendante. Toutes les constantes publiques restent également dans leur forme originale et servent d'alias pour les constantes PascalCase préférées. Elles continueront à exister dans la prochaine version majeure et auront le drapeau @deprecated.

Toutes les constantes de classe nouvellement ajoutées sont maintenant uniquement dans la variante PascalCase. Les constantes globales ne sont pas utilisées par Nette.

Enumérations

PHP 8.1 est livré avec des énumérations, qui seront également utilisées dans Nette. Les énumérations remplaceront la solution précédente utilisant les constantes. Il n'y a pas encore de norme de codage sur la façon d'écrire les énumérations, l'organisation PHP-FIG a échoué depuis longtemps à cet égard et propose des recommandations avec plusieurs années de retard. La documentation PHP elle-même est un guide. Pour les “cas d'énumération”, elle utilise exclusivement la notation PascalCase, et cela s'applique également à l'implémentation expérimentale précédente SplEnum.

Combiner des énumérations en PascalCase avec des constantes en SCREAMING_SNAKE_CASE aurait l'air incohérent, c'est donc aussi une raison de changer le style d'écriture des constantes.

Note technique : les énumérations sont du sucre syntaxique pour les constantes, du point de vue de PHP il n'y a pas de différence entre “enum case” et constante de classe.

Comment modifier son propre code ?

Tout changement cosmétique suscitera toujours beaucoup de ressentiment. Mais si vous essayez d'utiliser les constantes PascalCase pendant un mois, vous en serez ravi et vous ne pourrez plus revenir en arrière. Et vous aurez envie d'introduire la nouvelle notation dans votre propre code également. Comment faire ? L'idéal est de renommer les constantes dans PhpStorm en utilisant la fonction Refactor > Rename. Installez également le plugin String Manipulation et attribuez-lui un raccourci dans les paramètres de Switch Case > To Pascal Case.

Ensuite, tout ce que vous avez à faire est de placer le curseur sur la constante, d'appuyer sur Ctrl-F6 (renommer) et ensuite sur le raccourci pour To Pascal Case et PhpStorm changera la constante dans tout le projet.

Bon codage !