fbpx

Générer vos diagrammes UML depuis votre source PHP avec PHP2XMI

PHP2XMI est un excellent script CLI écrit en PHP5, qui vous permet de faire du reverse engineering sur vos classes PHP5 pour obtenir vos définitions de classes UML. Il génère un Schema XMI représentant vos classes et interfaces. La suite est simple, ouvrez le XMI en utilisant n’importe quel éditeur UML et vous aurez vos classes. Un éditeur gratuit que je vous conseille est Umbrello. Regardons comment ca marche!

Mise a jour

Une version “forquee” de PHP2XMI avec un support des namespaces (dans la phpdoc) : https://github.com/adoy/php2xmi-ns

fonctionnalités

supporte les tokens public, protected, private, abstract, static, interface, extends, implements.
Type de methode, via le parametre @type dans votre documentation (PHP5.1.x et plus)
Support du mot cle @package, les sous-packages aussi en les separant par des points
Support du mot cle @param
Support du mot cle @return
Excellente performance

Comment ca marche?

Ca utilise une fonctionnalité tres intéressante de PHP5, la Reflection,  qui permet de récupérer des infos sur le contexte d’un objet directement dans le code. (documentez vous sur php.net, Je couvrirai ca dans un article a part). En gros, la reflection va permettre de récupérer les infos sur une classe, une méthode, une interface etc, ce qui permet a tisser les liens entre les classes et de générer le xmi de description.

Installation

PHP2XMI est un package PEAR. L’installation se fait donc simplement via :

pear install http://tech.motion-twin.com/zip/PHP2XMI-0.1.2.tar.gz

Utilisation

Voici un exemple :

php2xmi --path=/include/path/1/:/include/path/2/ --recursive --no-private --no-protected --strict --output=fichier_resultat.xmi /chemin/vers/votre/autoload.php `find /chemin/path/1/ -name "cbp.*.php"`

Explication de cette commande :

  • php2xmi : nom du script
  • –path : include path requis par vos fichiers
  • –recursive : va parser aussi les sous répertoires
  • –no-private : n’affiche pas les propriétés et methodes privées
  • –no-protected : n’affiche pas les propriétés et methodes protégées
  • –strict : active le mode de débogage E_STRICT
  • –output : fichier resultat
  • /chemin/vers/votre/autoload.php `find /chemin/path/1/ -name “cbp.*.php”` : Chemin vers votre autoload au debut si vous en utilisez un, suivi par la liste de fichiers php, find fait l’affaire pour ca

Pour afficher l’aide, depuis votre shell :

$ php2xmi --help

comportements connus

PHP2XMI exécute votre code, l’opération ne reussira pas donc si il ya des erreurs dans la source. Aussi, si vous utilisez le mécanisme d’autoload, assurez vous d’inclure de votre fichier d’autoload au debut.

Si vous êtes sous PHP5.0.x, vous n’allez pas avoir les types d’attributs. Ceci est du au fait que la Reflection dans cette version n’implémente pas ReflectionAttribute::getDocComment() qui permet de récupérer le type des attributs. Ceci a auss pour effet que les compositions, aggregations, associations ne seront pas aussi gérées avec cette version de PHP. C’est une raison de plus pour mettre a jour votre PHP!

Exemple

Voici, a titre d’exemple (vous verrez que le code ne contient aucune logique.. j’ai pas bu mon cafe aujourd’hui) un bout de code qui contient deux classes et une interface :

title;
    }    

}
class object2 extends object
{
    /**
     * Title Setter
     *
     * @param object $object an object
     * @param string $title the title to set
     * @type boolean
     * @return true if the title has been set, false otherwise
     */
    public function setTitle(object $object, $title)
    {
        $this->title = title;
    }
}

Avec la commande :

php2xmi --recursive --no-private --no-protected  --output=classes.xmi fichier.php

En important classes.xmi sur umbrello, cela donne :

Conclusion

Vous remarquerez les types :undef que le diagramme presente, je suis en train de deboguer ceci, ceci n’empeche que l’outil fait pas mal de travail. C’est un outil que j’ai cherché longtemps! Je vous le conseille vivement.

Anis Berejeb

Anis est avant tout un passioné de l'agilité et du développement. Avec plus de 15 ans dans le domaine du développement web, son expertise combine des connaissances accrues dans l'ensemble des notions partant du développement logiciel jusqu'à l'organisation des équipes dans les environnements agiles à grande échelle.

You may also like...