Robert Landers a soumis le RFC nameof() à la liste internals de PHP pour discussion. La proposition introduit une construction gérée par le compilateur qui ressemble à une fonction mais se comporte comme ::class : elle est résolue en chaîne à la compilation et peut être utilisée partout où une chaîne littérale est acceptée, y compris dans les définitions de constantes, les clés de tableaux et les arguments d'attributs.
La construction couvre variables, propriétés, méthodes, fonctions et constantes. Ainsi, nameof($this->myProperty) produirait "myProperty" et nameof($a->exampleB(...)) produirait "exampleB", en utilisant la syntaxe des callables de première classe pour les fonctions et méthodes.
Un point central du débat est la résolution des noms. Dans la version actuelle, les constantes et fonctions renvoient le nom lexical et non le nom pleinement qualifié : si une fonction est importée avec use function Acme\bar as foo, nameof(foo(...)) donne "foo". Pour obtenir le nom complet, il faut l'écrire en entier dans nameof(). Landers justifie ce choix par les alias de traits et les messages d'erreur, où le nom local est souvent plus utile. Rowan Tommins défend la position inverse : le principal avantage par rapport aux chaînes simples serait l'expansion des espaces de noms, comme le fait ::class, surtout lorsque la chaîne est transmise à du code dans un autre fichier, par exemple le constructeur d'un attribut.
La gestion des erreurs reste ouverte. Landers a esquissé deux options : aucune vérification, soit une simple manipulation de chaînes comme ::class, ou un avertissement pour les noms inexistants, désactivable avec @. Tommins a soulevé la question du moment de la résolution, car une vérification à la compilation ne voit pas les symboles des autres fichiers et une vérification à l'exécution pose des questions d'autoloading. Landers a indiqué avoir mis à jour le RFC avec des détails après un retour de Dan Ackroyd.
Lydia de Jongh a suggéré une syntaxe de type constante magique, par exemple MyClass::$property::name, en arguant qu'elle fonctionnerait mieux dans les attributs et les éditeurs. Tommins a fait remarquer que ::class n'est pas réellement une constante et nameof() pas réellement une fonction ; les deux sont des syntaxes du compilateur produisant des chaînes, donc la forme fonctionnelle marche aussi dans les attributs. Landers a ajouté qu'une constante ::name pourrait entrer en conflit avec des constantes utilisateur existantes nommées "name".
Dan Ackroyd a critiqué l'idée de laisser des choix de conception à un vote secondaire. Selon lui, le processus RFC oblige les auteurs à réfléchir eux-mêmes aux détails ; proposer plusieurs options au vote leur permet d'éviter ce travail. Landers a promis d'ajouter des exemples d'utilisation concrets et des détails sur les conditions d'erreur au RFC. La discussion est toujours en cours et aucun vote n'a été annoncé.




Commentaires
Pas encore de commentaire — écris le premier.
Lance la discussion
Pas de compte ni de mot de passe — saisis simplement ton adresse e-mail et nous t’envoyons un lien de connexion à usage unique. Première visite ? Tout se met en place automatiquement.
Ton évaluation sera appliquée automatiquement après ta connexion.
Vérifie ta boîte mail
Nous avons envoyé un lien de connexion à …. Ouvre-le sur cet appareil — cet onglet te connectera automatiquement.
Rien reçu ? Vérifiez le dossier spam — et marquez le message « Non spam » pour qu'il arrive directement la prochaine fois.