8. L'autoloader

Mettons en place un autoloader

Mais je n'en ai pas envie moi 😠 Et est-ce qu'on en a vraiment besoin ici ?

Dans l'immédiat, il n'est peut être pas indispensable je vous l'accorde. Mais la répétition des  require  commence à se faire sentir, et une fois que notre application va évoluer, on risque d'en oublier 😞

On va donc créer la classe  Autoloader  dans le fichier  Autoloader.php  (qu'on place dans le dossier  config  )

Voici notre Autoloader :

<?php

namespace App\config;

class Autoloader
{
    public static function register()
    {
        spl_autoload_register([__CLASS__, 'autoload']);
    }

    public static function autoload($class)
    {
        $class = str_replace('App', '', $class);
        $class = str_replace('\\', '/', $class);
        require '../'.$class.'.php';
    }
}
On peut avoir quelques explications ? 😅

Bien sûr, on a créé deux méthodes,  register()  et  autoload()  😛

Mais encore ? Que fait spl_autoload_register() ? et str_replace() ? Je veux tout savoir moi ! Tout 😊

Ok très bien : RTFM 😜

Non mais ? Cette réaction ? Tu nous expliques ? 😡

Je ne peux pas et ne veux pas tout vous expliquer, vous devez apprendre à chercher par vous-même et ne pas attendre qu'on vous donne toutes les explications : un bon développeur doit être curieux et autonome.

Tant que j'y pense : lien vers la documentation de PHP : http://php.net/manual/en/

Revenons à nos moutons, euh à notre Autoloader, il faut maintenant l'appeler depuis nos fichiers  home.php  et  single.php

<?php
require '../config/Autoloader.php';
use \App\config\Autoloader;
Autoloader::register();

Si vous actualisez notre navigateur tout fonctionne toujours très bien 😙

Pensez à retirer les autres require sur les pages  home.php  et  single.phpAttention à ne pas supprimer les use, on en a besoin ici !

Eh tu vas pas t'en tirer comme ça ! On utilise encore require ! 😡

Oui, effectivement, mais on n'a plus qu'un seul require à faire et l'Autoloader charge les classes pour nous maintenant.

Mais quand on va créer un nouveau fichier pour poster un commentaire, on va devoir encore faire un require de l'autoloader ? Pas pratique quand même ?

Oui, je vous l'accorde. On va maintenant s'occuper de mettre en place un contrôleur frontal pour éviter ce type de répétition dans les fichiers.

Juste avant, une petite précision : dans le développement en PHP moderne, plus personne ne travaille à mettre en place un autoloader maison.

Pourquoi tu nous fais faire des trucs qu'on utilise plus alors ? 😠

La réponse est simple... pour que vous puissiez comprendre ce qu'est un autoloader et comment cela fonctionne. Si un jour vous tombez sur un projet ancien en PHP, vous pourrez aussi comprendre le fonctionnement et le mettre à jour.

Oui, ok, mais on fait comment maintenant ? On le modifie de nouveau ? 😤

 

Effectivement, on s'en occupe dans le prochain chapitre en utilisant l'autoloader de Composer. 😉

 

Quelques révisions

Si vous avez besoin de revoir certains points, voici les liens en conséquence :

Autoloader

spl_autoload_register

str_replace

Composer

 

Bilan

Dans ce chapitre, nous avons ajouté un Autoloader pour limiter l'utilisation des require multiple dans notre application et faciliter l'inclusion automatique de nos classes PHP.

Vous pouvez retrouver le code associé à ce chapitre sur GitHub.