Liam Hammett a ouvert une discussion sur un RFC proposant des expressions de balisage natives, une fonctionnalité qui ajoute une syntaxe inspirée de JSX pour les fragments HTML directement dans PHP.
La proposition introduit une syntaxe compacte pour définir et composer du balisage HTML comme expressions de langage. Les noms de balise en minuscules représentent des éléments HTML littéraux, tandis que les noms capitalisés, les séparateurs d'espace de noms ou les références de méthodes statiques désignent des composants. Toutes les expressions intégrées sont échappées par défaut pour la sécurité.
Une expression `<button class="btn">Sign in</button>` se compile en `new \Markup\Element('button', ['class' => 'btn'], ['Sign in'])` au moment de la compilation. Cela signifie que la signification du balisage est déterminée lors de la compilation, non à l'exécution. Les composants implémentant l'interface `Markup\Html` peuvent être invoqués comme `<Greeting name="Rasmus" />` et affichent automatiquement leur valeur de retour.
Une implémentation fonctionnelle avec des tests est disponible dans la pull request php/php-src#22661.
Les décisions de conception clés en discussion incluent l'heuristique de capitalisation pour distinguer les composants des éléments HTML. Garrett W. a remis en question si cette approche – empruntée au JSX de JavaScript, où les minuscules signifient HTML et les majuscules signifient composant – convient à PHP, étant donné que PSR-4 n'est pas un standard contraignant et que les noms de classe en minuscules sont légaux. Liam a répondu que l'heuristique prévient les erreurs silencieuses dues aux fautes de frappe, permet la résolution au moment de la compilation sans frais généraux du chargeur automatique et offre un avantage de performance pour le cas courant de balisage surtout HTML avec des composants dispersés.
D'autres participants à la discussion, dont Edmond Dantes, ont suggéré que PHP pourrait bénéficier de hooks de parseur généralisés permettant aux extensions de définir des syntaxes DSL personnalisées plutôt que de verrouiller une seule syntaxe de balisage. Edmond a noté que cette extensibilité pourrait permettre des expressions LINQ de type SQL et des modèles de métaprogrammation basés sur les attributs. Liam a reconnu que ce sont des considérations distinctes du domaine actuel du RFC.