Autoloading en PHP

Qui n’a jamais fait d’include de fichiers externes en PHP? C’est même récurrent pour les programmeurs.

Avouez que c’est quand même lourd à la longue. Il existe une méthode depuis PHP 5.3 pour résoudre automatique le chemin des fichiers de classe, enfin presque. A condition de bien comprendre quelques notions fondamentales en PHP objet.

Autoloading qu’est ce que c’est?

Quand vous avez à instancier un objet:

myDeuche = new Voiture();

PHP doit trouver le chemin du fichier qui contient la déclaration de classe et le charger (Autoloading). Prenons soins de nommer le fichier de déclaration de classe avec le même nom que la classe. Et dans un fichier il y a une seule classe. Ces deux conditions sont nécessaires pour faire marcher l’autoloading.

Votre fichier peut être dans le même répertoire que celui contenant le script ci-dessus.

Ou il peut être dans un sous répertoire ou sous sous répertoire.

Comment lui faire savoir dans ce cas?

C’est là qu’interviennent les espaces de nom.

soit la déclaration suit:

//Voiture.php

namespace vehicule;

class Voiture{

 //....suite du code

}

Ce fichier est obligatoirement dans le répertoire vehicule.

Ainsi lorsqu’on instancie l’objet Deuche, PHP va aller dans le répertoire vehicule pour chercher le fichier Voiture.php grâce à la correspondance du nom de classe (vous comprenez pourquoi on ne doit déclarer qu’une seule classe par fichier)

Historique et Évolution

L’autoloading a évolué avec PHP, particulièrement avec l’introduction de spl_autoload_register() dans PHP 5.1, qui a simplifié l’enregistrement de fonctions d’autoload personnalisées.

Les différentes méthodes d’autoloading

__autoload() (déprécié depuis PHP 7.2.0)

Cette fonction magique permettait de définir une méthode globale pour charger automatiquement les classes. Exemple :

function __autoload($className) {
    include $className . '.php';
}

spl_autoload_register()

Il s’agit de la méthode recommandée pour enregistrer une ou plusieurs fonctions d’autoloading :

spl_autoload_register(function ($class) {
    include 'classes/' . $class . '.class.php';
});

Autoloading PSR-4

La norme PSR-4 de PHP-FIG spécifie une manière standardisée d’autoloading des classes à partir de leurs namespaces. Elle est largement utilisée et soutenue par Composer.

{
    "autoload": {
        "psr-4": {
            "App\\": "src/"
        }
    }
}

Autoloading avec Composer

Composer, le gestionnaire de dépendances pour PHP, utilise l’autoloading version PSR-4 pour inclure automatiquement les bibliothèques externes. Il crée un fichier vendor/autoload.php qui gère l’autoloading des classes définies dans les packages installés. Composer n’est pas fourni avec PHP il faut l’installer.

require 'vendor/autoload.php';

use Monolog\Logger;
use Monolog\Handler\StreamHandler;

$log = new Logger('name');
$log->pushHandler(new StreamHandler('path/to/your.log', Logger::WARNING));

$log->warning('Foo');
$log->error('Bar');
Retour en haut