AutoLoad

Méthodespl_autoload_register()

On a vu qu'il fallait inclure le fichier contenant la définition de la classe avant de l'utiliser.

Ce qui nous oblige à ajouter pour chaque classe différente un require.

Afin de simplifier notre programmation, le PHP a prévu une fonction capable de réaliser le require dans le cas où la classe n'est pas connue.

1
spl_autoload_register();

MéthodeAutoload

Le principe de cet autoload est de lancer une fonction interne à chaque fois qu'une classe non déclarée cherche à créer une instance.

Pour cela, il nous faut ajouter une fonction à notre autoloading.

1
spl_autoload_register(function($class) {
2
  require_once $class . '.php';
3
});

L'interpréteur va désormais rechercher des fichiers portant le même nom que la classe.

require_once : permet de ne charger qu'une seul fois le fichier.

ExempleExemple

Identite.php

1
<?php
2
class Identite
3
{
4
  ...
5
}

autoload.php

1
<?php
2
spl_autoload_register(function($class){
3
  require_once $class . '.php';
4
});

exemple.php

1
<?php
2
require 'autoload.php';
3
$utilisateur = new Identite('vanneste','vincent');

RemarqueVérification

Avant de charger les fichiers dans l'autoload, on peut vérifier leur existence

1
<?php
2
spl_autoload_register(function($class){
3
  $file = join(DIRECTORY_SEPARATOR, [$path, $class.'.php']) ;
4
  if(file_exists($file))
5
    return require_once $file;
6
});
7
8

Il est possible que les fichiers ne soient pas dans le même dossier.

On peut préciser les chemins possibles et les tester.

1
<?php
2
spl_autoload_register(function($class){
3
    $paths = array(
4
        join(DIRECTORY_SEPARATOR, [__DIR__]),
5
        join(DIRECTORY_SEPARATOR, [__DIR__, 'Projet']),
6
        join(DIRECTORY_SEPARATOR, [__DIR__, '..', 'src'])
7
    );
8
    
9
    foreach($paths as $path){
10
        $file = join(DIRECTORY_SEPARATOR, [$path, $class.'.php']) ;
11
        if(file_exists($file))
12
            return require_once $file;
13
    }
14
});