La fonction SPL_AUTOLOAD_UNRENGISTER () est utilisée pour supprimer un AutolOader précédemment enregistré à partir de la pile AutoloAD SPL (Standard PHP Library). L'utilisation de base est la suivante:
<span><span><span class="hljs-title function_ invoke__">spl_autoload_unregister</span></span><span>(</span><span><span class="hljs-string">'my_autoloader'</span></span><span>);
</span></span>
Dans le code ci-dessus, «my_autoloader» se trouve l'autoloader que vous avez précédemment enregistré via SPL_autoload_register () . Cette fonction supprime MY_AUTOLOADER de la pile de chargement afin qu'elle ne soit plus utilisée pour le chargement de classe ultérieur.
En fait, SPL_AUTOLOAD_UNRENGISTER () lui-même ne dépend pas d'un environnement ou d'une configuration PHP spécial. Il fonctionne théoriquement tant que la version PHP est supérieure à 5.1.2 (cette fonctionnalité est fournie à partir de PHP 5.1.2). Cependant, la clé pour travailler correctement sur spl_autoload_unregister () est de savoir si vous utilisez correctement SPL_autoload_register () pour enregistrer un autoloader, et ce chargeur est en effet ajouté à la pile SPL Autoload.
Par conséquent, pour déterminer si l'environnement PHP actuel peut prendre en charge SPL_autoload_unregister () , nous devons le vérifier à partir des aspects suivants:
Tout d'abord, confirmez la version PHP actuelle. SPL_AUTOLOAD_UNRENGISTER () est une fonctionnalité qui est prise en charge uniquement dans PHP version 5.1.2 et supérieure. Si votre version PHP est inférieure à 5.1.2, SPL_autoload_unregister () ne sera pas disponible. Vous pouvez obtenir la version PHP actuelle via la fonction phpversion () :
<span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">version_compare</span></span><span>(PHP_VERSION, </span><span><span class="hljs-string">'5.1.2'</span></span><span>, </span><span><span class="hljs-string">'>='</span></span><span>)) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"PHP Prise en charge de la version spl_autoload_unregister()"</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"PHP Version non prise en charge spl_autoload_unregister()"</span></span><span>;
}
</span></span>
Si votre version PHP prend en charge cette fonctionnalité, assurez-vous que l'autoloader a été enregistré. Vous pouvez utiliser SPL_AUTOLOAD_FUNCTIONS () pour afficher l'autoloader actuellement enregistré. Si le tableau retourné n'est pas vide, cela signifie que le chargeur a été enregistré et SPL_AUTOLOAD_UNRENGISTER () peut être utilisé normalement.
<span><span><span class="hljs-variable">$autoloaders</span></span><span> = </span><span><span class="hljs-title function_ invoke__">spl_autoload_functions</span></span><span>();
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">count</span></span><span>(</span><span><span class="hljs-variable">$autoloaders</span></span><span>) > </span><span><span class="hljs-number">0</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"L'autoader est actuellement enregistré"</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Aucune inscription automatique du chargeur"</span></span><span>;
}
</span></span>
PHP fournit un mécanisme de chargement automatique par défaut, en particulier SPL_AUTOLOAD () enregistre un chargeur de base par défaut. Si vous essayez de désinstaller ce chargeur par défaut, vous pouvez rencontrer des problèmes. Pour éviter cela, vous pouvez d'abord vous assurer que vous ne désinstallez pas l'autoloader par défaut.
L'enregistrement du chargeur par défaut n'interférera pas avec votre chargeur personnalisé, mais si vous désinstallez le chargeur par défaut, il peut entraîner des erreurs inconnues. Donc, avant d'essayer de désinstaller, vous pouvez vérifier s'il existe d'autres autoloaders enregistrés.
Assurez-vous que lors de l'appel SPL_autoload_unregister () , une fonction de rappel valide est passé. Par exemple:
<span><span><span class="hljs-comment">// Enregistrer un autoloader</span></span><span>
</span><span><span class="hljs-title function_ invoke__">spl_autoload_register</span></span><span>(function (</span><span><span class="hljs-variable">$class</span></span><span>) {
</span><span><span class="hljs-keyword">include</span></span><span> </span><span><span class="hljs-string">'path/to/classes/'</span></span><span> . </span><span><span class="hljs-variable">$class</span></span><span> . </span><span><span class="hljs-string">'.php'</span></span><span>;
});
</span><span><span class="hljs-comment">// L'autoader peut être désinstallé de la manière suivante</span></span><span>
</span><span><span class="hljs-title function_ invoke__">spl_autoload_unregister</span></span><span>(function (</span><span><span class="hljs-variable">$class</span></span><span>) {
</span><span><span class="hljs-keyword">include</span></span><span> </span><span><span class="hljs-string">'path/to/classes/'</span></span><span> . </span><span><span class="hljs-variable">$class</span></span><span> . </span><span><span class="hljs-string">'.php'</span></span><span>;
});
</span></span>
Mais veuillez noter que lorsque vous utilisez des fonctions anonymes comme un autoloader, la déchargement directement via SPL_AUTOLOAD_UNRENGISTER () peut échouer car la référence aux fonctions anonymes est générée dynamiquement lorsqu'elle est appelée. Afin de pouvoir le désinstaller, il est généralement nécessaire de résumer d'abord la fonction anonyme dans une fonction nommée ou d'utiliser une méthode d'objet appelé.
Pour déterminer si l'environnement actuel prend en charge la désinstallation de l'autoloader à l'aide de spl_autoload_unregister () , la clé est:
Assurez-vous que la version PHP est supérieure à 5.1.2.
Utilisez SPL_AUTOLOAD_REGISTER () pour enregistrer correctement l'autoloader.
Confirmez que l'autoloader enregistré existe actuellement, vous pouvez le vérifier via SPL_AUTOLOAD_FUNCTIONS () .
Tant que ces conditions sont remplies, SPL_autoload_unregister () peut fonctionner normalement et ne sera pas limitée par l'environnement PHP.