Constantes de classe
Constructeurs et destructeurs
Les classes et les objets
PHP Manual

## Auto-chargement de classes

De nombreux développeurs qui créent des applications orientées objet, créent un fichier source par définition de classe. L'inconvénient majeur de cette méthode est d'avoir à écrire une longue liste d'inclusions de fichier classes au début de chaque script : une inclusion par classe.

En PHP 5, ce n'est plus nécessaire. Vous pouvez définir la fonction __autoload() qui va automatiquement être appelée si une classe n'est pas encore définie au moment de son utilisation. Grâce à elle, vous avez une dernière chance pour inclure une définition de classe, avant que PHP ne déclare une erreur.

> Note: Avant PHP 5.3.0, les exceptions lancées depuis la fonction __autoload ne pouvaient pas être interceptées par un bloc catch et provoquaient une erreur fatale. Depuis PHP 5.3.0+, elles peuvent être interceptées danscatch, à une précision près : Si vous lancez une exception personnalisée, alors la classe de cette exception doit être disponible. La fonction __autoload doit pouvoir être utilisée récursivement pour charger automatiquement la classe de l'exception personnalisé.

> Note: L'auto-chargement n'est pas disponible si vous utilisez PHP en mode interactif CLI.

> Note: Si le nom de la classe est utilisé, .g. dans la fonction call_user_func(), alors il peut contenir des caractères dangereux comme ../. Il est recommandé de ne pas utiliser d'entrées utilisateur dans de telle fonction, ou, au moins, vérifier l'entrée dans la fonction __autoload().

Exemple #1 Exemple avec __autoload()

Cet exemple tente de charger les classes MaClasse1 et MaClasse2, dans les fichiers MaClasse1.php et MaClasse2.php respectivement.

`<?php
function __autoload($class_name) {
require_once $class_name . '.php';
}
$obj = new MaClasse1();
$obj2 = new MaClasse2();
?>`

Exemple #2 Autre exemple d'auto-chargement

Cet exemple tente de charger l'interface ITest.

`<?php
function __autoload($name) {
var_dump($name);
}
class Foo implements ITest {
}
/*
string(5) "ITest"
Fatal error: Interface 'ITest' not found in ...
*/
?>`

Exemple #3 Auto-chargement avec gestion des exceptions en PHP 5.3.0+

Cette exemple lance une exception et montre comment la traiter avec les blocs try/catch.

`<?php
function __autoload($name) {
echo "Tentative de chargement de $name.\n";
throw new Exception("Impossible de charger $name.");
}
try {
$obj = new NonLoadableClass();
} catch (Exception $e) {
echo $e->getMessage(), "\n";
}
?>`

L'exemple ci-dessus va afficher :

    Tentative de chargement de NonLoadableClass.
    Impossible de charger NonLoadableClass.

Exemple #4 Auto-chargement avec gestion des exceptions en PHP 5.3.0+. Pas d'exception personnalisée

Cet exemple lance une exception pour une classe non-chargeable, en utilisant une exception personnalisé.

`<?php
function __autoload($name) {
echo "Tentative de chargement de $name.\n";
throw new MissingException("Impossible de charger $name.");
}
try {
$obj = new NonLoadableClass();
} catch (Exception $e) {
echo $e->getMessage(), "\n";
}
?>`

L'exemple ci-dessus va afficher :

    Tentative de chargement de NonLoadableClass.
    Tentative de chargement de MissingException.

    Fatal error: Class 'MissingException' not found in testMissingException.php on line 4

### Voir aussi

- unserialize()
- unserialize_callback_func
- spl_autoload()
- spl_autoload_register()

Constantes de classe
Constructeurs et destructeurs
Les classes et les objets
PHP Manual