[AGGIORNAMENTO: Questa risposta non gestisce gli spazi dei nomi, quindi è praticamente obsoleto. Lascio qui nel caso in cui qualcuno trova l'approccio DOT interessante.]
Ecco un modo semplice per rappresentare graficamente l'ereditarietà delle classi in PHP.
Grep per le definizioni di classe e quindi trasformare l'output grep in sintassi DOT. NOTA: questo processo richiederà prove ed errori nella tua situazione. Esegui il grep separatamente e modificalo per mostrare le giuste linee di definizione della classe prima di inserirlo nello script!
Questo script era per PHP su standard * nix (ho usato Ubuntu), con graphviz installato, e usando grep -v per escludere alcune directory che non erano di alcun interesse perché stavo guardando un codebase di CakePHP. Fdp ha funzionato meglio di sfdp, dot, circo o neato in questa situazione.
Creare generateClassHierarchy.sh
#!/bin/bash
echo 'digraph code {' > code.dot;
grep -r "^class " * | grep -v "^app/vendors" | grep -v "^cake/" | grep -v "Binary file" | sed 's/.*://' | sed 's/class/ /' | sed 's/ extends/-> /' | sed 's/ implements .*//' | sed 's/ \?{.*$//' | sort >> code.dot
echo '}' >> code.dot;
fdp -Tpng -ocode.fdp.png code.dot 2> /dev/null # Ignore syntax error
echo "OK";
Poi basta:
cd /var/www/my_app/ # or wherever
bash ~/shell/generateClassHierarchy.sh # or wherever
eog code.fdp.png
Sostituire eog con il visualizzatore di immagini preferito. L'ho eseguito su Zend Framework come test e prodotto un grafico PNG da 22 megabyte. L'esecuzione su un solo Zend_Db mostra questo (esempio è sul mio sito):
http://chapman.id.au/generate-php-class-inheritance-diagrams-in-graphviz
Penso che ci sia qualcosa di fondamentalmente sbagliato circa il disegno di blogging software che richiede di avere un visualizzatore di codice PHP per capire il suo temi. –
http://www.nwiresoftware.com/ viene in mente. Ma è commerciale. – Gordon
@John non proprio, ma quando si inizia, può essere difficile districarsi dal groviglio. Ho desiderato qualcosa di simile in alcuni progetti, ma poi ho memorizzato le loro strutture da solo. –