Dans PHP, SPL_autoload_register est utilisé pour enregistrer une ou plusieurs fonctions Autoload pour exécuter automatiquement la logique de chargement lorsqu'une classe ou interface est utilisée mais n'a pas été incluse. Un scénario courant consiste à combiner des espaces de noms pour organiser des fichiers de classe dans différents répertoires et éviter les exigences fréquentes ou inclure via des chargeurs automatiques.
Cependant, dans certains cas, nous devons supprimer une fonction de charge enregistrée , puis nous pouvons utiliser SPL_autoload_unregister .
registre:
<span><span><span class="hljs-title function_ invoke__">spl_autoload_register</span></span><span>(</span><span><span class="hljs-keyword">callable</span></span><span> </span><span><span class="hljs-variable">$autoload_function</span></span><span>);
</span></span>Retirer:
<span><span><span class="hljs-title function_ invoke__">spl_autoload_unregister</span></span><span>(</span><span><span class="hljs-keyword">callable</span></span><span> </span><span><span class="hljs-variable">$autoload_function</span></span><span>);
</span></span>Le $ Autoload_Function ici doit être cohérent avec le temps d'enregistrement, sinon il ne peut pas être supprimé correctement.
Lorsqu'une méthode de classe définie dans l'espace de noms est utilisée comme fonction de chargement, faites attention que les valeurs transmises à spl_autoload_register et spl_autoload_unregister doivent contenir l'espace de noms complet. Par exemple:
<span><span><span class="hljs-title function_ invoke__">spl_autoload_register</span></span><span>(</span><span><span class="hljs-keyword">__NAMESPACE__</span></span><span> . </span><span><span class="hljs-string">'\Loader::autoloadA'</span></span><span>);
</span></span>S'il est écrit comme chargeur :: Autoloada sans préfixe d'espace de noms, alors SPL_autoload_unregister peut ne pas correspondre, entraînant un échec à supprimer.
Commutation de plusieurs stratégies de chargement <br> Certains cadres ou bibliothèques peuvent enregistrer plusieurs fonctions de chargement successivement pour être compatibles avec différents répertoires ou règles de chargement. Après avoir couru vers une certaine étape, il vous suffit de garder l'un d'eux et vous pouvez supprimer les autres via SPL_AUTOLOAD_UNRENGISTER .
Chargeur temporaire <br> Au cours de la phase de débogage ou de migration, un chargeur de débogage temporaire peut être enregistré et supprimé une fois l'initialisation terminée pour éviter d'affecter la logique formelle.
Les paramètres de spl_autoload_unregister doivent être exactement les mêmes que ceux au moment de l'enregistrement.
Dans un environnement d'espace de noms, écrivez un nom qualifié complet, tel que __Namespace__. '\ Class :: Method' .
La suppression d'un chargeur non valide peut éviter des déclencheurs répétés ou une charge incorrecte.
En utilisant rationnellement SPL_AUTOLOAD_REGISTER et SPL_AUTOLOAD_UNRENGISTER , nous pouvons gérer de manière flexible le mécanisme de chargement automatique de PHP, en particulier dans les grands projets et les environnements multi-namespace, ce qui le rend plus important.