PEAR (http://pear.php.net) est très mal connu dans les entreprises (en tout cas celle que je visite...).
Je ne vais pas vous décrire ici tous les fondements et usages de cet outil, cependant, au delà d'une "librairie" vieillotte, il s'agit d'un outil puissant qui vous donne le pouvoir de réutiliser votre code et de gérer vos dépendances.
Commentaires récents
v0.2.0 releasée !
Nouvelle feature : calcul des ratios de taille, nombre de fichier et nombre de lignes pour des patterns de noms de fichiers donnés :
ex: "je veux connaitre la proportion de fichiers PHP qui sont situés dans le répertoire tests/ par rapport à ceux qui sont dans le répertoire library/"
Voilà un outil intéressant que j'ai hâte de tester.
Sur le même sujet, l'outil phploc de Sebastien Bergmann qui permet de calculer des informations similaires mais plus basées sur le nombre de lignes pas les ratios (que l'on peut calculer ensuite vous me direz).
Je suis en train d'essayer, mais après avoir installé PHPUnitLaucher et les outils de dev Java, "Run As... Junit test" m'ouvre la console pour me dire "May be port 8888 in used, try another". Ou parfois il ne dit rien.
J'avoue que je ne sais pas quoi passer à -DphpunitArgs...
@Cédric: je t'invite à ouvrir un ticket sur http://code.google.com/p/phpunit4eclipse/issues/list, ou à contacter Bertrand Paquet le développeur "bertrand point paquet at gmail point com"
J'utilise ext/inclued.
Qu'as-tu utilisé comme outils ?
@jpauli: Je ne connaissais pas ext/inclued, je pense qu'il est très similaire à mon outil, qui par contre est un outil d'analyse statique (pas au runtime). J'ai moi même développé l'outil qui a servi à généré ce graphe. L'algorithmique est simple : analyser toutes les références à des classes / inclusions autres que la classe courante, c'est à dire recenser les extends, implements, includes, appels statiques, instanciations, ... Mon problème se situe plutôt au niveau de la réprésentation graphique, j'ai actuellement fait le même choix basique que ext/inclued, à savoir l'utilisation de graphviz/dot, qui fonctionne plutôt bien, mais mes conclusions sont que pour profiter de toutes la richesse de ce type de graphe/informations il est nécessaire d'utiliser une représentation graphique "vivante" permettant de parcourir en temps réel les dépendances, notamment lorsqu'il s'agit du graphe de dépendances de ZF (plusieurs centaines de noeuds)... Pour l'instant j'ai vu une librairie Flash qui serait parfaite pour ça, Constellation Roamer de Asterisq (www.asterisq.com), mais le prix de la licence ma un peu refroidi, pour l'instant...
Je compte mettre en open source le code de l'outil, mais le temps me manque ces jours-ci ;)
Le temps manque ? C'est bizarre je connais bien le principe xD
Très intéréssant ton outils. Bcp de projets PEAR possèdent un parseur PHP libre basé sur les tokens (PHPDepends, PHPCPD etc...), peut-être pourra tu créer un channel pear et un composant quand tu auras le temps ? ;-)
Quoiqu'il en soit, je ne peux t'aider en ce qui concerne l'animation, mais je reste persuadé que de tels paquets existent dans le monde du libre (le contraire m'étonnerait). A chercher... :)
Salut, merci pour cet article intéressant.
Pour la visualisation dynamique, ça me fait penser à un outils Java (désolé...) très intéressant pour parcourir le modèle d'une BDD : jailer. Il se base sur une librairie graphique (prefuse). C'est du Java certes, mais il y a surement des idées à puiser ;)
A+
Merci pour l'analyse, effectivement il serait bien de pouvoir greffer un outil similaire à celui ci à une trace d'exécution temps réel.
Pourquoi pas à base des traces générées par xdebug, que j'analyse avec kcachegrind pour le moment. Au niveau des bibliothèques qui permettent de faire ça, je pense à Infovis(http://thejit.org/demos/).
Sinon, une bonne manière de comprendre et d'analyser les dépendances de notre code, c'est d'utiliser l'inversion de contrôle, et de coupler le tout avec un injecteur de dépendances, pour générer directement un schéma !
C'est amusant, j'avais commencé aussi à coder un analyseur de dépendances mais pas du tout dans ce but. Le mien était de pouvoir extraire seulement le nécessaire d'une librairie ou d'un framework.
@alexis: déjà essayer InfoVis (JS) mais pas satisfait pour ce besoin. Mes conclusions sont que seul flash / flex offre une ergonomie suffisante dans mon cas (fluidité, usabilité...).
@evoilliot: jailer semble trop spécifique aux base de données effectivement. J'ai déjà regardé du côté du projet Prefuse, qui a une implémentation exceptionnelle en Flex/Flash (Flare Project). C'est d'ailleurs celle qui est en top de ma liste. Le coup d'intégration de la librairie est cependant assez élevé (pas mal de développement ActionScript), je n'ai malheureusement pas assez de temps pour améliorer ma Proof of Concept sous Flex Builder :(
@jean-marc: peut être des bonnes idées à prendre dans ton outils, il est disponible quelque part ?
@all: version open source imminente...
Respects !
Voila un outil des plus intéressants concernant l'OO.
J'utilisais PHPDepends jusqu'à présent, mais ton outil est d'ores et déja dans ma liste ;-)
J'ai toujours dit que PEAR c'est 4 choses utilisables indépendament.
1° Une librairie à classe unique. Je veux dire que normalement il n'y a pas 2 classes qui font la même chose.Et quand c'est le cas il faut le dire.
2° C'est un outil de packaging et déploiement pour ce package de classe php (pear) ou de modules de php (PECL)
3° C'est une convention de codage
4° C'est une communauté.
Beaucoup se limitent à croire que c'est juste le 1° et que ca en fait un simple concurrent à Zend_Framework, Symphony, Midgard, .... Hors beacoup de librairies (y compris ces dernières) peuvent être installée avec pear.
Merci Olivier pour ce super billet, sa partie technique et surtout tes remarques.
Tu me donnes des idées pour notre plateforme d'intégration continue...
Conseils d'utilisation de PEAR ? Utilisez-le toujours pour packager/déployer vos devs OS !
Sinon en ce moment j'essaye d'améliorer la débianisation des paquets pear pour qu'elle soit justement plus adaptée aux nouveaux usages : https://www.assembla.com/wiki/show/... Si quelqu'un s'y connait et peut jeter un coup d'oeil...
Très bien ton outil. Quels paramètres as tu utilisé pour générer le diagramme de ZF? Merci.
Très bon programme. Merci.
Par contre, peut-il créer un graph des dépendances des classes si ces dernières sont placées à plusieurs dans un même fichier ?
Je m'explique : j'ai plusieurs classes dans un même fichier .php. Exemple dans le fichier Page.php, j'ai une classe "class Page extends SiteTree" et une autre "class Page_Controller extends ContentController". Malheureusement, je ne parviens pas à obtenir les classes *Controller sur mon graph...
Merci d'avance pour votre aide.