Aller au contenu principal

L'autoloading

Notions théoriques

En PHP, l'autoloading est une fonctionnalité qui permet de charger automatiquement les classes nécessaires sans avoir à les inclure manuellement à chaque fois.

C'est particulièrement utile lorsque vous travaillez avec de nombreux fichiers de classes.

Pour mettre en place l'autoloading, PHP fournit une fonction appelée spl_autoload_register().

La fonction spl_autoload_register() enregistre une autre fonction (que vous définissez) que PHP appellera automatiquement si vous essayez d'utiliser une classe ou une interface qui n'est pas encore définie.

info

Par exemple, si vous avez un répertoire contenant toutes vos classes, vous pouvez enregistrer une fonction d'autoloading qui va inclure automatiquement le fichier contenant la classe chaque fois que vous essayez de l'utiliser.

Exemple pratique

Supposons que vous ayez une classe Fichier dans un fichier Fichier.php. Au lieu d'inclure manuellement ce fichier chaque fois que vous voulez utiliser la classe Fichier, vous pouvez enregistrer une fonction d'autoloading comme suit :

function autoload($class_name) {
include $class_name . '.php';
}
spl_autoload_register('autoload');

$fichier = new Fichier();

Dans cet exemple, lorsque vous essayez de créer un nouvel objet Fichier, PHP appelle la fonction d'autoloading qui inclut automatiquement le fichier Fichier.php.

astuce

On peut aussi utiliser une fonction anonyme :

spl_autoload_register(function ($class_name) {
include $class_name . '.php';
});

$fichier = new Fichier();

Test de mémorisation/compréhension


Quelle fonction PHP est utilisée pour automatiser le chargement des classes ?


Comment PHP sait-il quelle classe charger avec l'autoloading ?


Dans quel cas l'autoloading est-il utile ?


Que se passe-t-il si vous essayez d'utiliser une classe qui n'est pas encore définie et que vous avez enregistré une fonction d'autoloading ?



TP pour réfléchir et résoudre des problèmes

Dans ce TP, nous allons créer un système de gestion des fichiers avec autoloading.

Vous allez créer une classe Fichier et l'utiliser sans avoir à inclure manuellement le fichier de classe.

  1. Dans votre répertoire "Documents" créez le répertoire tp_autoloading.

  2. Dans le répertoire tp_autoloading, créez un répertoire classes pour vos classes PHP.

  3. Dans le répertoire classes, créez un fichier Fichier.php pour le code de la classe Fichier qui aura les propriétés publiques nom et droits.

  4. Dans le répertoire tp_autoloading, créez le fichier main.php :

    <?php
    // Utiliser l'autoloading'
    print("Utiliser l'autoloading \n\n");
  5. Testez le fonctionnement de ce fichier :

    php main.php

  6. Dans le fichier main.php, utilisez spl_autoload_register() pour automatiser le chargement des classes.

  7. Dans le fichier Fichier.php (présent dans le répertoire classes) , créez une classe Fichier avec les 2 propriétés publiques $nom et $droits.

  8. Dans le fichier main.php, créez un objet $monFichier de type Fichier (c'est à dire une instance de la classe Fichier).

  9. Définissez les propriétés de l'objet $monFichier :

    • son nom = "document.txt"
    • et ses droits = "rwxr--r--".
    $monFichier->nom = "document.txt";
    $monFichier->droits = "rwxr--r--";
  10. Dans le fichier main.php, affichez les droits du fichier, sous la forme "Les droits du fichiers ... sont ..."

  11. Lancez l'exécution du fichier main.php :

    php main.php 

Si tout va bien, l'exécution du fichier main.php va afficher :

Utiliser l'autoloading

Les droits du fichiers 'document.txt' sont 'rwxr--r--'.
Une solution