Robert Landers ha presentado el RFC nameof() en la lista de internals de PHP para su discusión. La propuesta introduce una construcción a nivel de compilador que parece una función pero se comporta como ::class: se resuelve en una cadena en tiempo de compilación y puede usarse en cualquier lugar donde se acepte un literal de cadena, incluidas las definiciones de constantes, las claves de arrays y los argumentos de atributos.
La construcción cubre variables, propiedades, métodos, funciones y constantes. Por ejemplo, nameof($this->myProperty) se evaluaría como "myProperty" y nameof($a->exampleB(...)) como "exampleB", usando la sintaxis de callables de primera clase para funciones y métodos.
Un punto central del debate es la resolución de nombres. En el borrador actual, las constantes y funciones devuelven el nombre léxico en lugar del nombre totalmente cualificado: si una función se importa con use function Acme\bar as foo, nameof(foo(...)) produce "foo". Para obtener el nombre completo hay que escribirlo completo dentro de nameof(). Landers lo justifica con los alias de traits y los mensajes de error, donde el nombre local suele ser más útil. Rowan Tommins defiende lo contrario: la principal ventaja frente a las cadenas simples sería la expansión de espacios de nombres, como hace ::class, sobre todo cuando la cadena se pasa a código en otro archivo, como el constructor de un atributo.
El manejo de errores sigue abierto. Landers esbozó dos opciones: ninguna comprobación, es decir, pura manipulación de cadenas como ::class, o emitir un aviso para nombres inexistentes, silenciable con @. Tommins planteó la cuestión de cuándo ocurriría la resolución, ya que las comprobaciones en compilación no ven símbolos de otros archivos y las comprobaciones en ejecución plantean dudas sobre el autoloading. Landers indicó que actualizó el RFC con detalles tras los comentarios de Dan Ackroyd.
Lydia de Jongh sugirió una sintaxis tipo constante mágica, como MyClass::$property::name, argumentando que funcionaría mejor en atributos y editores. Tommins señaló que ::class no es realmente una constante ni nameof() una función; ambas son sintaxis del compilador que generan cadenas, por lo que la forma de función también funciona en atributos. Landers añadió que una constante ::name podría colisionar con constantes de usuario existentes llamadas "name".
Dan Ackroyd criticó el plan de dejar decisiones de diseño a un voto secundario. Según él, el proceso RFC obliga a los autores a pensar los detalles por sí mismos; ofrecer varias opciones a votación les permite evitar ese trabajo. Landers se comprometió a añadir ejemplos de uso concretos y detalles sobre las condiciones de error al RFC. La discusión sigue abierta y no se ha convocado votación.




Comentarios
Aún no hay comentarios — escribe el primero.
Inicia la conversación
Sin cuenta ni contraseña — introduce tu correo y te enviamos un enlace de acceso de un solo uso. ¿Primera vez? Todo se configura automáticamente.
Tu valoración se aplicará automáticamente al iniciar sesión.
Revisa tu bandeja de entrada
Hemos enviado un enlace de acceso a …. Ábrelo en este dispositivo — esta pestaña te conectará automáticamente.
¿No llega nada? Mira en la carpeta de spam — y marca el correo como «No es spam» para que la próxima vez llegue directo.