⊗ppOpNsCA 107 of 107 menu

Sa propre fonction pour l'autoloading de classes en POO en PHP

Souvent, l'autoloading par défaut peut ne pas vous convenir pour certaines raisons. Dans un tel cas, vous pouvez écrire votre propre autoloader.

Pour cela, il faut passer en premier paramètre à la fonction spl_autoload_register votre fonction de rappel écrite par vous. Cette fonction sera appelée lorsque PHP détectera un accès à une classe non chargée. Le nom de la classe avec son espace de noms sera passé en paramètre de cette fonction :

<?php spl_autoload_register(function($class) { // la variable $class contiendra le nom de la classe avec l'espace de noms }); ?>

Et la responsabilité de la fonction est de charger cette classe via require en fonction de son nom. C'est-à-dire qu'à l'intérieur de cette fonction, nous devons définir notre propre règle pour le chargement des classes, notre propre convention de nommage.

Écrivons un exemple d'autoloader personnalisé. Supposons, par exemple, que nous disions que le chemin vers le fichier de la classe depuis la racine du site sera le même que l'espace de noms, mais en conservant la casse des caractères.

Autrement dit, si nous avons une classe Core\Admin\PageController, alors le chemin vers celle-ci devrait être Core/Admin/PageController.php.

Comme vous le voyez, pour transformer le nom de la classe avec son espace de noms, il suffit de remplacer les barres obliques inverses par des barres obliques normales, et d'ajouter .php au nom de la classe. Faisons cela :

<?php spl_autoload_register(function($class) { $filename = str_replace('\\', '/', $class) . '.php'; require($filename); }); ?>

Cependant, nous obtiendrons un chemin relatif vers le fichier (relatif à la racine du site). Il est préférable de faire un chemin absolu, comme ceci :

<?php spl_autoload_register(function($class) { $root = $_SERVER['DOCUMENT_ROOT']; $filename = $root . '/' . str_replace('\\', '/', $class) . '.php'; require($filename); }); ?>

Il y a encore une subtilité. Dans différents systèmes d'exploitation, le chemin des dossiers peut utiliser la barre oblique normale ou la barre oblique inversée. Rendons notre code indépendant du système d'exploitation. Pour cela, au lieu de la barre oblique normale pour séparer les chemins, nous utiliserons la constante DIRECTORY_SEPARATOR, qui contient le bon séparateur pour le système d'exploitation sur lequel notre script est exécuté. Au final, nous obtenons le code suivant :

<?php spl_autoload_register(function($class) { $root = $_SERVER['DOCUMENT_ROOT']; $ds = DIRECTORY_SEPARATOR; $filename = $root . $ds . str_replace('\\', $ds, $class) . '.php'; require($filename); }); ?>

Testez la fonction d'autoloading que j'ai créée.

Inventez votre propre règle d'autoloading et implémentez-la.

Français
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Nous utilisons des cookies pour le fonctionnement du site, l'analyse et la personnalisation. Le traitement des données est effectué conformément à la Politique de confidentialité.
accepter tout personnaliser refuser