Puis-je créer des alias d'espace de noms à l'aide des fonctions PHP 8.1 (telles que les noms de catégories) ?
Nous avons nommé le module d'espace de noms par défaut dans la société « Sous-société » et souhaitons qu'il soit désormais « Société » puisque son utilisation s'est étendue.
Une réponse parfaite est d'avoir le moins de surcharge possible et de permettre un chargement automatique transparent. Un problème est que des outils comme Intelephense comprendront cet alias.
Ce projet utilise également Composer, donc la réponse à la réécriture de l'espace de noms en l'utilisant fonctionnera également.
Oui, et réfléchissez :
class_alias
a été introduit avec PHP 5.3 avec ses nouvelles fonctionnalités de langage d'espace de noms. Il a été créé pour faciliter la migration d'un espace de noms global vers un espace de noms - en fait entre espaces de noms.Cependant, vous devez d'abord enregistrer un nom de classe pour chaque ancienne classe/interface/trait/énumération auprès de la nouvelle contrepartie.
L'ancienne bibliothèque a disparu et il y a maintenant une toute nouvelle bibliothèque Tiger. Toutes leurs classes, etc. peuvent être mappées en échangeant les préfixes d'espace de noms (
'MyOldLibName' -> 'MyTigerLibName'
).Cela peut être fait au moment de l'exécution car PHP fait la plupart du travail à votre place.
Enregistrez un chargeur automatique qui se charge en tant que nouveau préfixe d'espace de noms en fonction de l'ancien préfixe d'espace de noms et ajoute le nom de la catégorie à l'ancien nom.
Exemple :
Ce code est très simple, juste deux explications sur les paramètres d'inscription :
$throw = true
: Lorsque le chargeur automatique d'alias ne parvient pas à s'enregistrer, vous souhaitez arrêter l'application immédiatement, sinon vous obtiendrez d'étranges erreurs "classe non trouvée" beaucoup plus tard.$prepend = false
: Le rappel ne doit être appelé que s'il existe encore du code utilisant l'ancien nom de classe. Par conséquent, le code standard vient désormais en premier en utilisant le nouvel espace de noms et le chargement automatique standard.Il convient peut-être de noter la partie
class_exists()
:Si la nouvelle classe n'est pas encore chargée, elle déclenche le chargement automatique.
Après avoir enregistré l'autoloader, l'ancien code chargera automatiquement la nouvelle classe sous l'ancien alias.
Exemple complet sur-
3v4l.org.