Athos99, PHP et développement WEB

Un site consacré au développement web en php

Déterminer les classes PHP contenues dans un fichier

Date: 
3 fév 2012

Dans un répertoires vous avez plusieurs fichiers PHP et vous désirez connaître les classes qui sont déclarées et selectionner celles qui héritent d'une classe connue.

Solution

La fonction PHP get_declared_classes() retourne toute la liste des classes déclarées dans les scripts PHP qui ont été chargés par l'interpréteur PHP. L'astuce consiste à mémoriser la liste des classes qui ont été déjà chargées, ensuite de charger tous les scripts du répertoire spécifié et de redemander la liste des classes chargée. En effectuant une différence, il est possibles de trouver les classes contenues dans tous les scripts du répertoire et de tester si elles héritent d'une classe choisie.

function listeClass($dir, $classMere) {
    $newClass = array();

// la liste actuelle des classes déclarées
    $list = get_declared_classes();

// on charge tous les scripts php du répertoire
    foreach (glob($dir . '/*.php') as $filename) {
        include_once $filename;
    }

// après les chargements des scripts, 
// de nouvelles classes ont été déclarées,
// on relit le nombre de classes déclarée 
// et on fait la différence avec $list,
// ce qui nous donne la liste des nouvelles classes
    $diff = array_diff(get_declared_classes(), $list);

// on recherche toutes classes qui héritent de la class mère
    foreach ($diff as $c) {
        if (is_subclass_of($c, $classMere)) {
            $newClass[] = new $c();
        }
    }
    return $newClass;
}

Contrainte :

Pour connaître toute la listes des classes, les scripts du répertoire ne doivent pas êtres chargés avant l'appel à cette fonction.

L'utilité :

Imaginons que votre applications permettent d'ajouter des fonctionnalités particulières en utilisant des plugins. Il suffira de déposer dans un  répertoire des scripts qui contiendront une ou plusieurs classes qui étendent classe de base de  plugin. Au démarrage ou depuis les pages d'administrations, vous obtiendrez la liste des classes.

 

Rubrique: 
Trucs et astuces
Tags: 
PHP
classes