Selon http://php.net/manual/en/language.oop5.autoload.php la fonction magique __autoload () deviendra DEPRECATED et DELETED (!) Dans les prochains PHP versions. L'alternative officielle est spl_autoload (). Voir http://www.php.net/manual/en/function.spl-autoload.php . Mais le manuel php ne fait pas expliquer la bonne utilisation de ce bébé.
Ma question: comment remplacer cela (mon chargeur automatique de classe automatique)
function __autoload($class) {
include 'classes/' . $class . '.class.php';
}
avec une version avec spl_autoload ()? Le problème est: je ne peux pas comprendre comment donner un chemin à cette fonction (elle accepte uniquement les espaces de noms).
Soit dit en passant: il y a beaucoup de discussions concernant ce sujet ici sur SO.com, mais aucune ne donne une solution propre et simple qui remplace mon one-liner sexy.
Vous devez enregistrer les fonctions de chargement automatique avec spl_autoload_register
. Vous devez fournir un "callable" . La meilleure façon de le faire, à partir de 5.3, est d'utiliser une fonction anonyme:
spl_autoload_register(function($class) {
include 'classes/' . $class . '.class.php';
});
Le principal avantage de cette contre __autoload
c'est bien sûr que vous pouvez appeler spl_autoload_register
plusieurs fois, tandis que __autoload
(comme toute fonction) ne peut être défini qu'une seule fois. Si vous avez du code modulaire, ce serait un inconvénient important.
Mise à jour 2018: il ne devrait pas y avoir vraiment autant d'occasions où vous avez besoin de rouler votre propre chargeur automatique. Il existe une norme largement acceptée (appelée PSR-4 ) et plusieurs implémentations conformes. La façon évidente de le faire est d'utiliser Composer .