Liam Hammett ha abierto una discusión sobre un RFC que propone expresiones de marcado nativo, una característica que añade sintaxis inspirada en JSX para fragmentos HTML directamente en PHP.
La propuesta introduce una sintaxis compacta para definir y componer marcado HTML como expresiones de lenguaje. Los nombres de etiqueta en minúsculas representan elementos HTML literales, mientras que los nombres capitalizados, separadores de espacio de nombres o referencias de método estático denotan componentes. Todas las expresiones incrustadas se escapan por defecto para la seguridad.
Una expresión `<button class="btn">Sign in</button>` se compila en `new \Markup\Element('button', ['class' => 'btn'], ['Sign in'])` en tiempo de compilación. Esto significa que el significado del marcado se determina durante la compilación, no en tiempo de ejecución. Los componentes que implementan la interfaz `Markup\Html` pueden invocarse como `<Greeting name="Rasmus" />` y muestran automáticamente su valor de retorno.
Una implementación funcional con pruebas está disponible en la solicitud de extracción php/php-src#22661.
Las decisiones de diseño clave bajo discusión incluyen la heurística de capitalización para distinguir componentes de elementos HTML. Garrett W. cuestionó si este enfoque —tomado del JSX de JavaScript, donde minúsculas significa HTML y mayúsculas significa componente— es apropiado para PHP, dado que PSR-4 no es un estándar vinculante y los nombres de clase en minúsculas son legales. Liam respondió que la heurística previene errores silenciosos causados por errores tipográficos, permite resolución en tiempo de compilación sin gastos generales del cargador automático, y proporciona una ventaja de rendimiento para el caso común de principalmente HTML con componentes dispersos.
Otros participantes en la discusión, incluyendo Edmond Dantes, sugirieron que PHP podría beneficiarse de ganchos del analizador generalizados que permitan a las extensiones definir sintaxis DSL personalizadas en lugar de bloquear una única sintaxis de marcado. Edmond señaló que tal extensibilidad podría permitir expresiones LINQ tipo SQL y patrones de metaprogramación basados en atributos. Liam reconoció que estas son consideraciones separadas del alcance actual del RFC.