PHP UML Generator [geschlossen]


110

Wie generiere ich ein UML-Diagramm basierend auf vorhandenen Klassen in PHP?


2
Ich arbeite nicht mehr mit PHP, daher habe ich keinen Code zum Testen. Als ich dies gepostet habe, hat keine der ersten Antworten genug getan, aber seitdem hat sich viel geändert. Ich habe mit PHP 5.2 gearbeitet und es ist jetzt PHP7 in diesen Tagen.
Jeffrey04

Antworten:


42

Es gibt auch das PHP UML-Tool von pear .

PHP_UML:

  • Kann UML / XMI-Dateien in Version 1.4 oder in Version 2.1 (logische Ansichten, Komponentenansichten und Bereitstellungsansichten) generieren.
  • Kann eine API-Dokumentation im HTML-Format generieren
  • Kann PHP-Code (Code-Skelett) aus einer bestimmten XMI-Datei generieren
  • Kann UML / XMI-Inhalte von Version 1.4 auf Version 2.1 konvertieren

Installieren Sie es in der Befehlszeile über:

$ pear install pear/php_uml

(Dies war früher so, $ pear install pear/php_uml-alphaaber das Paket ist seitdem stabil.)

Generieren Sie Ihre xmi:

$ phpuml -o project.xmi


2
Aus irgendeinem Grund mag pear.com diesen Link nicht ohne einen abschließenden
Stephen Fuhry

1
@ Stephen, ja das habe ich auch bemerkt! Wenn Sie auf den Link klicken, erhalten Sie eine 404, aber wenn Sie die Adressleiste auswählen und die Eingabetaste drücken, funktioniert dies.
Nickf

1
Ein paar Jahre später ist der Befehl jetzt pear install PHP_UML-1.6.1(siehe pear.php.net/package/PHP_UML/download/All oder pear.php.net/package/PHP_UML )
Ben

1
Dies sollte die akzeptierte Antwort sein. Das Tool ist spektakulär.
Xofo

3
funktioniert nicht mit PHP 7
DevWL

41

Ich empfehle BOUML nachdrücklich :

  • ist extrem schnell (schnellstes UML-Tool, das jemals erstellt wurde, siehe Benchmarks ),
  • bietet solide Unterstützung für den Import und Export von PHP (unterstützt auch C ++, Java, Python)
  • ist Multiplattform (Linux, Windows, andere Betriebssysteme),
  • ist voll ausgestattet, beeindruckend intensiv entwickelt (siehe Entwicklungsgeschichte , es ist kaum zu glauben, dass so schnelle Fortschritte möglich sind).
  • unterstützt Plugins, hat eine modulare Architektur (dies ermöglicht Benutzerbeiträge , sieht aus, als würde sich eine BOUML-Community bilden)

Die Benchmarks sehen wirklich beeindruckend aus. Ich liebe Enterprise Architect, aber es hat keine PHP-Unterstützung. Ich werde dieses Tool weitergeben, danke.
Paul Dragoonis

1
@Paul Dragoonis Sparx Systems Enterprise Architect bietet PHP-Unterstützung - und nicht die schlechteste .
Axt.

5
Auf der Webseite für BOUML heißt es nun: "VORSICHT: Aufgrund der anhaltenden Lizenzverletzungen, Angriffe und Beleidigungen von Wikipedia-Nutzern [...] habe ich beschlossen, die Arbeit an Bouml einzustellen, außer um Fehler zu beheben."
MPV

1
"[18. Dezember 2011] Downloads werden bis auf Weiteres ausgesetzt" von ihrer offiziellen Website. http://bouml.free.fr/download.html - Das liegt daran, dass ich eine Version für Win7 brauchte. Ich stelle mir vor, dass es möglicherweise noch in Ubuntu-Repositories erhältlich ist - muss überprüft werden
Val Redchenko

4
Version 6.1 veröffentlicht am 23. September 2012 . Die Entwicklung scheint wieder angezogen zu haben. Keine Notiz über Verlangsamung, Anhalten usw. bouml.fr/historic.html
Andrew Ensley

24

phUML

phUML ist ein vollautomatischer UML-Klassendiagrammgenerator, der in PHP geschrieben und unter der BSD-Lizenz lizenziert ist. Es ist in der Lage, jeden objektorientierten PHP5-Quellcode zu analysieren und eine geeignete Bilddarstellung der oo-Struktur basierend auf der UML-Spezifikation zu erstellen.

UML-Beispiel

./phuml -r /var/www/my_project -graphviz -createAssociations false -neato out.png

Schritt für Schritt Anleitung


Zum Herunterladen ist SVN / Subversion erforderlich und es wird nicht wirklich angegeben, wie die Lizenz des Quellcodes lautet, aber es sieht gut aus! yah Ich würde vorsichtig sein,

Die Lizenz ist direkt dort in der Seitenleiste der Projektwebsite unter dem Autor Creative Commons
verlinkt

Dies ist die Lizenz für den Inhalt der Website. Die LIZENZ für das Projekt muss im Projekt selbst enthalten sein.

3
Ich schickte eine E-Mail an den Autor Jakob und er antwortete mit einem Update des Repositorys mit einer klaren und eindeutigen 3-Klausel-bsd-Lizenz
Anthony Hatzopoulos

Ich habe das heruntergeladen und es nach einigem Basteln zum Laufen gebracht. War wirklich ganz nett, außer dass ich die Assoziationen nicht zum Laufen bringen kann, aber ich bin sicher, ich werde es herausfinden. Schön, einfach. Keine grafische Benutzeroberfläche, aber keine so große Sache.
Impulss

19

Die beste (Windows) Software, die ich für PHP und UML gefunden habe, ist Sparx Systems Enterprise Architect . Neben einer Vielzahl von Funktionen unterstützt es Folgendes für PHP:

  • Reverse Engineering von objektorientiertem PHP in UML-Klassendiagramme
  • Generieren Sie PHP-Klassendefinitionen aus UML-Klassendiagrammen
  • Synchronisieren Sie die in einer UML-Klasse vorgenommenen Änderungen mit der entsprechenden PHP-Klassendefinition
  • Synchronisieren Sie Änderungen, die in einer PHP-Klassendefinition vorgenommen wurden, mit der entsprechenden UML-Klasse
  • Erstellen Sie UML-Sequenzdiagramme, um zu zeigen, welche PHP-Klassen verwendet werden und wie sie verwendet werden
  • Erstellen Sie eine detaillierte Dokumentation Ihres PHP-Codes im Standard-RTF- und HTML-Format
  • Führen Sie Code-Engineering für Modelle durch, um Basis-PHP-Seiten zu generieren.

nicht kostenlos (199 $), aber definitiv das Geld wert.


1
Wow, das ist wirklich ein nützliches und professionelles Programm, danke für den Tipp !! Ich habe gerade versucht, das UML-Klassendiagramm mit der Reverse Engineering-Methode des Sparx EA aus PHP-Quellcode zu generieren, und es hat wie ein Zauber funktioniert. Ich war schockiert, wie gut das funktioniert hat. : D Da unsere Projekte immer größer werden und wir immer mehr Objekte erstellen, wird es immer schwieriger, unseren eigenen Code im Auge zu behalten, aber es ist eine große Hilfe, da die UML-Diagramme auf die richtige Weise generiert werden Natürlich können Ausnahmen auftreten.) Nachdem wir den Code fertiggestellt haben. Dies hilft sogar, die Beziehungen zwischen Objekten zu vereinfachen.
Sk8erPeter

@ax - Ich bin ein Neuling und verliere mich ein bisschen in der Liste der Funktionen (unter "Editionen vergleichen"). Wie würde die Funktion heißen, mit der ich PHP-Code eingeben (oder auf PHP-Dateien verlinken) und im Gegenzug ein Diagramm erhalten kann? Ich versuche herauszufinden, welche Version ich möglicherweise benötige.
JDelage

7

Haben Sie Autodia schon ausprobiert ? Das letzte Mal, als ich es versuchte, war es nicht perfekt, aber es war gut genug.


Ich habe versucht, Autodia, aber irgendwie kann ich kein genaues Klassendiagramm (PHP5) generieren
Jeffrey04

7

Es gibt auch php2xmi . Sie müssen ein wenig manuell arbeiten, aber es werden alle Klassen generiert. Sie müssen sie also nur in ein Klassendiagramm in Umbrello ziehen .

Ansonsten ist es ziemlich einfach, ein Diagramm mit Reflexion und Grafik zu erstellen. Ich habe einen Schnipsel hier , dass Sie als Ausgangspunkt verwenden können.


7

So habe ich es gemacht (direkt vom Code zum PDF-Zeichnen ohne manuelles Zeichnen von irgendetwas):

  1. Verwenden Sie BOUML für "Reverse Engineering von PHP-Code", um das Klassenmodell zu extrahieren (BOUML ist im "Universum" -Repository von Ubuntu verfügbar). Ich empfehle BOUML ernsthaft für diesen Schritt, da es im Vergleich zu vielen anderen Programmen, die ich ausprobiert habe, sehr schnell ist. Außerdem scheint BOUML das Modell korrekt zu extrahieren (für die Teile, die BOUML sogar zu extrahieren versucht).
  2. Verwenden Sie BOUML, um das Modell als XMI 1.4-Datei zu exportieren
  3. Verwenden Sie ArgoUML , um diese XMI-Datei zu importieren (Sie können für diesen Schritt die Webstart-Version verwenden).
  4. XMI aus ArgoUML exportieren (Ich weiß nicht, welche XMI-Version / -Variante die Ausgabe ist, aber es ist nicht das gleiche Ergebnis wie die Ausgabe von BOUML. Das argouml-graphviz kann XMI-Dateien nicht direkt von BOUML verarbeiten).
  5. Verwenden argouml-graphviz zu konvertieren ArgoUML XMI - Dateiformat Punkt exportiert (Sie verwenden müssen , können Saxon statt xsltproc , um es durch Arbeit verwenden , von XSLT2)
  6. Verwenden Sie dot oder fdp oder sfdp , um das Klassendiagramm zu rendern.

Hier ist ein Beispiel für eine geeignete Befehlszeile für die Verwendung von fdp zur Ausgabe eines PDF-Diagramms (vorausgesetzt, die durch die XLST-Verarbeitung von argouml-graphviz generierte Punktdatei wird als xmi-model.dot gespeichert):

fdp -Tpdf -Gmaxiter=1000 -Gmindist=0.5 -Gpackmode=node \
  -Eweight=0.05 -Elen=1.0 -Eminlen=1.0 -Gsplines=true \
  -Goverlap=false xmi-model.dot -oxmi-model.pdf

Alternativ können Sie PHP_UML oder php2xmi anstelle von BOUML verwenden, um den Teil "Reverse Engineering" auszuführen. Das habe ich noch nicht versucht.

(Ich verwende den Ausdruck "Reverse Engineering", weil es den Anschein hat, dass UML-Benutzer diese Wörter verwenden, wenn sie das Extrahieren von Klassen- und Methodeninformationen aus dem Quellcode meinen . Ich würde diese Wörter persönlich als Extrahieren von Informationen aus ausführbaren Binärdateien oder Rohdaten interpretieren Drahtdaten.)

Wenn Sie das Klassendiagramm lieber von Hand zeichnen möchten (anstatt den Computer für die gesamte Zeichnung zu verwenden), können Sie für die Zeichnung entweder BOUML oder ArgoUML verwenden. In diesem Fall hilft die Verwendung der "Reverse Engineered" -Daten über BOUML.


5

Wenn Sie UML einfach aus Ihren vorhandenen PHP-Klassen generieren möchten, sollten Sie PHPStorm 3.0 IDE in Betracht ziehen. Es ist gut, vorhandenen Code in UML zu replizieren.

Schauen Sie sich die PHP Storm-Funktionsliste an .


2
Visualisiert keine Abhängigkeiten, nur Vererbung.
Basil Musa

1

Sie können Visual Paradigm für UML verwenden. Dies ist möglicherweise nicht das bestbezahlte Produkt (699 US-Dollar), nur als Option, wenn jemand es versuchen möchte. Es kann Klassendiagramme aus PHP erstellen und umgekehrt, und nicht nur PHP, es gibt eine Reihe von Sprachen, die Sie auswählen können, wie C #, C ++, Ruby, Java, VB.NET, Python, Ziel C, Perl usw. Es gibt auch eine Testversion, die Sie überprüfen können.


1

Theoretisch können Sie mit PhpStorm Ihre Klassen mithilfe von UML visualisieren. Die Generation ist nicht wirklich großartig, aber Sie können Dinge effektiv umgestalten und zumindest Eltern, Implementierungen, Konstanten, Attribute, Methoden und deren Sichtbarkeit auf eine nette Art und Weise in der Vorschau anzeigen.

Lage

Ich möchte einem Kollegen eine Kommunikation zwischen bereits vorhandenen Komponenten visualisieren.

Prozess mit PHPStorm

https://blog.jetbrains.com/phpstorm/2017/09/uml-diagrams-in-phpstorm-2017-2/

Vorteile

  • Schöne Benutzeroberfläche, letztes Diagramm.
  • Kann Code aus einem Diagramm umgestalten.
  • Kann Notizen hinzufügen.
  • Das Klassendiagramm symbolisiert private / öffentliche Eigenschaften, Konstruktoren und Methoden.

Nachteile

  • Keine Unterstützung für PHP 7.
  • Schmerzhaft zu bedienen. Die Größe der generierten Boxen kann nicht geändert werden.
  • Beim Hinzufügen einer neuen Beziehung gehen die vorherigen zufällig verloren: O wtf?
  • Durch einen Neustart von PhpStorm werden die Diagramme zerstört
  • Ich habe meine Meinung geändert, es ist unmöglich, Beziehungen zu nutzen

Ergebnis

Wie auch immer, nach einer schmerzhaften Arbeitsstunde konnte ich nur nicht verwandte Boxen generieren und musste zusätzliches Programm verwenden, um Beziehungen zu verknüpfen. Wirklich schlecht. Aber ich glaube, sobald es richtig funktioniert, wird es eine großartige Funktion sein, denn wenn sich der Code ändert, werden die Diagramme automatisch aktualisiert!

Verwenden Sie PhpStorm vorerst nicht für UML-Diagramme.


Ich nehme an, das ist neu (:
Jeffrey04

Richtig. Derzeit bin ich in der gleichen Situation. Ich habe einen komplexen Teil eines Systems entwickelt und möchte ihn für meinen Kollegen visualisieren. Ich habe verschiedene Tools ausprobiert, aber sie sind beschissen und hässlich :) Ich werde es mit PHPStorm machen und meine Antwort aktualisieren, wie es aussieht und wie mächtig es ist. Ich werde Sie heute das Ergebnis @ Jeffrey04
Lukas Lukac

Es ist okay, ich mache eigentlich seit einiger Zeit kein PHP mehr
Jeffrey04

0

Um ehrlich zu sein, sollten Sie in erster Linie kein UML-Modell aus Code generieren, sondern Code aus UML-Modell;).

Selbst wenn Sie sich in einer seltenen Situation befinden und dieses Reverse Engineering durchführen müssen, wird im Allgemeinen empfohlen, dies von Hand zu tun oder zumindest die Diagramme aufzuräumen, da automatisch generierte UML wirklich schlechte visuelle (= Informationen) aufweist. Wert die meiste Zeit.

Wenn Sie nur die Diagramme erstellen müssen, ist es wahrscheinlich eine gute Sache, sich zu fragen, warum genau? Wer ist das Zielpublikum und was ist das Ziel? Was hat das automatisch generierte Diagramm zu bieten, welcher Code nicht?

Grundsätzlich akzeptiere ich nur eine Antwort auf diese Frage. Es wurde einfach zu groß und unverständlich.

Was wiederum ein Grund ist, überhaupt mit UML zu beginnen, anstatt mit dem Codieren zu beginnen;) Es heißt Analyse und ist rückläufig, weil jeder zweite Geschäftsmann denkt, dass es ein bisschen zu teuer und nicht wirklich notwendig ist.


7
Es stimmt, aber das Leben ist komplizierter als einige Prinzipien, die sinnvoll anzuwenden sind. Möglicherweise müssen Sie den tatsächlichen Code mit dem ursprünglichen UML-Diagramm vergleichen oder einen Code oder einen Code analysieren, der ohne UML-Diagramme implementiert wurde.
DAH

3
Nicht zustimmen. Großer Wert durch die Visualisierung einer Codebasis / eines Codes mit einem Diagramm. Code ist wie eine Wegbeschreibung, aber bei zu vielen Richtungen kann man manchmal eine Karte nützlich finden.
Basil Musa

1
Die meisten UML-Zeichenprogramme haben eine so schlechte Benutzeroberfläche, dass es schneller ist , den Code zu schreiben und das UML-Diagramm automatisch zu generieren, selbst wenn Sie dann den Code wegwerfen, den Sie zum Generieren des Diagramms verwendet haben ...
Mikko Rantalainen
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.