Blog de Portekoi : Programmation et Astuces

Programmation Cobol, Php, Asp, Java et DotNet…

POO : Inclure des classes en PHP 5 via autoload

Lorsque l’on programme en POO en PHP sans framework et que l’on créé ses propres objets, on a tendance à empiler les « includes » en-tête des fichiers.

Heureusement, en PHP5, ils ont pensé à nous via la fonction « __autoload ».

Voici la syntaxe de base :

function __autoload($class_name) {
    require_once $class_name . '.php';
}

Donc, en admettant que nous ayons dans la même page PHP, une instanciation d’une classe « User » et d’une autre « Access »

<?php
//require
require_once($_SERVER["DOCUMENT_ROOT"] . "/_class/class.user.php");
require_once($_SERVER["DOCUMENT_ROOT"] . "/_class/class.access.php");

$user = new User("PORTEKOI");
$access = new Access($user->id);
?>

Mais lorsque l’on a 4, 5 ou plus de classes à inclure, cela devient vite fastidieux.

En PHP 5, nous avons donc « __autoload » qui fonctionne de cette manière (je reprends l’exemple précédent) :

<?php
function __autoload($class_name) {
    require_once($_SERVER["DOCUMENT_ROOT"] . '/_class/class.' . strtolower($class_name) . '.php');
}
$user = new User("PORTEKOI");
$access = new Access($user->id);
?>

Ce code fonctionnera.

En le sécurisant :

<?php
function __autoload($class_name) {
    if(file_exists($_SERVER["DOCUMENT_ROOT"] . '/_class/class.' . strtolower($class_name) . '.php')) {
        require_once($_SERVER["DOCUMENT_ROOT"] . '/_class/class.' . strtolower($class_name) . '.php');
    } else {
        throw new Exception("Impossible de charger $class_name.");
    }
}
try {
$user = new User("PORTEKOI");
$access = new Access($user->id);
} catch (Exception $e) {
    echo $e->getMessage(), "\n";
}
?>

Simple mais efficace.

, ,

Un commentaire sur “POO : Inclure des classes en PHP 5 via autoload

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *