2016-12-10 3 views
0

En PHP, j'ai une fonction qui définit les chargeurs automatiques en fonction du site enfant sélectionné dans le site parent.PHP - réinitialiser le chargement automatique et les classes déclarées

La réinitialisation des chargeurs automatiques est excellente avec la fonction spl_autoload_unregister.

Cependant, ce que je remarque est que lorsque je charge un fichier de classe qui a déjà été initié avant le site enfant, ce fichier de classe 'old' est toujours utilisé après la réinitialisation des chargeurs automatiques.

Exemple:

charges Parent site example\namespace\RouterClass de c:\parent\site\RouterClass

Puis-je réinitialiser tous les chargeurs automatiques et initient l'enfant place et définir les auto-chargeurs corrects pour l'enfant place.

Ensuite, le site enfant charge example\namespace\RouterClass mais au lieu d'obtenir ce fichier via le nouveau chargeur automatique de c:\child\site\RouterClass, il récupère la classe de l'ancien fichier tel que défini par le site parent.

Je vois la classe enregistrée via la fonction:

get_declared_classes() 

Mais je ne suis pas en mesure de réinitialiser cette liste variable. Si une réinitialisation de ce cache de classes est possible alors PHP doit lancer une nouvelle recherche pour ce RouterClass et vérifiera le chargeur automatique du site enfant pour le trouver.

La deuxième option que j'ai cochée était runkit_method_redefine, mais il n'y a pas de fonction similaire pour les classes comme runkit_class_redefine.

Est-ce que quelqu'un a une idée de la façon de réinitialiser la liste des classes déclarées? Ou comment réaliser ce qui précède sans renommer tous les espaces de noms du site enfant.

+0

Si vous incluez un fichier, ce fichier est inclus (duh). ce que vous devez faire et pourquoi? – Federkun

+0

Parce que vous pouvez alors changer de contexte dans votre code et travailler avec un contexte dans framework v1 et avec un autre contexte dans framework v2. – PeterH

Répondre

1

Impossible. Une fois qu'une classe est déclarée, c'est là pour de bon.

Si vous devez définir dynamiquement des chargeurs automatiques, vous devez le faire avant de charger les classes affectées.