PHP UML Generator [关闭]


110

如何基于PHP中的现有类生成UML图?


2
我不再使用PHP,因此没有实际测试的代码。当我发布这篇文章时,最初的答案还不够,但是从那以后发生了很多变化。我使用的是PHP 5.2,现在是PHP7。
Jeffrey17年

Answers:


42

pear还提供了PHP UML工具。

PHP_UML:

  • 可以在1.4版或2.1版中生成UML / XMI文件(逻辑,组件和部署视图)
  • 可以生成HTML格式的API文档
  • 可以从给定的XMI文件生成PHP代码(代码框架)
  • 可以将UML / XMI内容从1.4版转换为2.1版

通过以下方式在命令行上安装它:

$ pear install pear/php_uml

(以前是这样,$ pear install pear/php_uml-alpha但此后包装变得稳定了。)

生成您的xmi:

$ phpuml -o project.xmi


2
由于某种原因,pear.com不喜欢没有斜杠的链接:pear.php.net/package/PHP_UML
Stephen Fuhry 2010年

1
@斯蒂芬,是的,我也注意到了!如果单击该链接,它将为您提供404,但是如果选择地址栏并按Enter,则它将起作用。
尼克

1
几年后,命令现在pear install PHP_UML-1.6.1(见pear.php.net/package/PHP_UML/download/Allpear.php.net/package/PHP_UML

1
这应该是公认的答案。该工具非常出色。
Xofo

3
无法使用php 7
DevWL

41

我强烈推荐BOUML,其中:

  • 非常快(有史以来最快的UML工具,请查看基准测试),
  • 具有坚实的PHP导入和导出支持(还支持C ++,Java,Python)
  • 是多平台的(Linux,Windows和其他操作系统),
  • 功能齐全,开发能力令人印象深刻(看看开发历史,很难相信会有如此快速的进步)。
  • 支持插件,具有模块化架构(这允许用户做出贡献,就像正在建立BOUML社区一样)

基准看起来确实令人印象深刻。我爱企业架构师,但没有PHP支持。谢谢,我将继续使用此工具。
Paul Dragoonis 2010年

1
@Paul Dragoonis Sparx Systems Enterprise Architect 确实具有PHP支持- 并不是最糟糕的支持。
斧头。

5
BOUML的网页现在显示:“注意:由于持续不断的许可证冲突,维基百科人士的攻击和侮辱,我决定停止Bouml的工作,只修复错误。”
MPV

1
从其官方网站“ [2011年12月18日]暂停下载,直至另行通知”。http://bouml.free.fr/download.html-这是因为我需要Win7的版本。我想它可能仍然可以从Ubuntu存储库中获得-需要检查
Val Redchenko'2

4
6.1版本于2012年9月23日发布。看来发展又开始了。没有关于放慢速度,停止等的通知。bouml.fr/historic.html
Andrew Ensley

24

UM

phUML是用PHP编写的全自动UML类图表生成器,已获得BSD许可。它能够解析任何PHP5面向对象的源代码,并根据UML规范创建oo结构的适当图像表示。

UML示例

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

逐步指南


需要下载SVN / Subversion,但实际上并没有说源代码的许可是什么,但是看起来不错!是的,我会仔细查看源代码,上面绝对没有许可证,唯一的自述文件位于我认为的网站上

该许可证是与正确的,在该项目的网站侧边栏,笔者下,知识共享:creativecommons.org/licenses/by-nc-sa/3.0
安东尼HATZOPOULOS

这是网站内容的许可证,项目的许可证必须包含在项目本身中。

3
我给作者Jakob发送了一封电子邮件,他用一个清晰​​明确的3句bsd许可
Anthony Hatzopoulos,2014年

我下载了此文件,并进行了一些修补后将其投入使用。真的很好,只是我无法使这些关联正常工作,但是我敢肯定我会弄清楚的。很好,很简单。虽然没有GUI,但没什么大不了的。
冲动

19

我发现做PHP和UML的最好的(Windows)软件是Sparx Systems Enterprise Architect。除了一系列功能外,它还支持以下功能为PHP功能:

  • 将面向对象的PHP反向工程为UML类图
  • 从UML类图生成PHP类定义
  • 将UML类中所做的更改同步到相应的PHP类定义中
  • 将PHP类定义中所做的更改同步到相应的UML类中
  • 创建UML序列图以显示PHP类使用的方式以及如何使用它们
  • 以标准RTF和HTML格式生成有关PHP代码的详细文档
  • 对模型执行代码工程以生成基本的PHP页面。

并非免费(199美元),但绝对物有所值。


1
哇,确实是一个非常有用且专业的程序,谢谢您的提示!!我刚刚尝试了使用Sparx EA的反向工程方法从PHP源代码生成的UML类图,并且它的工作原理很吸引人,我对此功能的出色表现感到震惊。:D随着我们的项目越来越大,并且我们创建越来越多的对象,关注我们自己的代码变得越来越困难,但这对它有很大的帮助,因为它以正确的方式生成UML图(当然,也许会发生异常)在我们完成代码之后。这甚至有助于简化对象之间的关系。
Sk8erPeter

@ax-我是新手,我对他们的功能列表(在“比较版本”下)有些迷惑。允许我输入PHP代码(或链接到PHP文件)并获得图的功能的名称是什么?试图弄清楚我可能需要哪个版本。
JDelage


7

还有php2xmi。您需要做一些手工工作,但是它会生成所有类,因此您要做的就是将它们拖到Umbrello的类图中。

否则,使用反射和graphviz生成图非常简单。我在这里有一个片段,您可以以此为起点。


7

这是我的操作方法(直接从代码到PDF绘图,而无需任何人工绘图):

  1. 使用BOUML用于“反向工程PHP代码” [原文如此]来提取类模型(BOUML可从Ubuntu的“ universe”存储库中获得)。我强烈建议在此步骤中使用BOUML,因为与我尝试过的许多其他程序相比,它确实非常快。另外,似乎BOUML似乎正确地提取了模型(对于BOUML甚至试图提取的部分)。
  2. 使用BOUML将模型导出为XMI 1.4文件
  3. 使用ArgoUML导入所述XMI文件(您可以在此步骤中使用Webstart版本)
  4. 从ArgoUML导出XMI(我不知道输出是哪个XMI版本/变量,但与BOUML的输出结果不同。argouml-graphviz无法直接从BOUML处理XMI文件)。
  5. 使用argouml-graphviz将ArgoUML导出的XMI文件转换为点格式(您可能需要使用saxon由于使用XSLT2,而不是xsltproc才能使其工作)
  6. 使用dotfdpsfdp渲染类图。

这是使用fdp输出PDF图表的合适命令行示例(假设由argouml-graphviz XLST处理生成的点文件已保存为xmi-model.dot):

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

作为替代方案,您可以尝试使用PHP_UMLphp2xmi而不是BOUML来进行“逆向工程”部分。我还没有尝试过。

(我使用的是“逆向工程”一词,因为似乎UML人们在从源代码中提取类和方法信息时就使用了这些词。。我个人将这些词解释为从可执行二进制文件或捕获的原始信息中提取信息。连线数据。)

如果您希望手动绘制类图(而不是使用计算机来完成所有绘制),则可以使用BOUML或ArgoUML进行绘制。在这种情况下,通过BOUML使用“反向工程”数据将有所帮助。



1

您可以将Visual Paradigm用于UML。这可能不是收入最高的产品(699美元),只是任何人都可以尝试的一种选择。它可以从PHP创建类图,反之亦然,不仅可以使用PHP,还可以选择多种语言,例如C#,C ++,Ruby,Java,VB.NET,Python,Objective C,Perl等。试用版可以检查。


1

从理论上讲,您可以使用PhpStorm使用UML可视化您的类。生成的代并不太好,但是您可以有效地重构东西,至少可以很好地预览父对象,实现,常量,属性,方法及其可见性。

情况

我想可视化同事之间已经存在的组件之间的通信。

使用PHPStorm的过程

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

优点

  • 漂亮的用户界面,最终图。
  • 能够从图中重构代码。
  • 能够添加注释。
  • 类图很好地象征着私有/公共属性,构造函数,方法。

缺点

  • 不支持PHP 7。
  • 痛苦地使用。无法调整生成的框的大小。
  • 添加新关系时,先前的关系会随机丢失:O wtf?
  • 重新启动PhpStorm会破坏图表
  • 改变主意,无法使用关系

结果

无论如何,经过一个小时的辛苦工作,我只能生成不相关的框,并且不得不使用其他程序来链接关系。特别糟糕。但是我相信,一旦它们正常运行,它将是一个很棒的功能,因为随着代码的更改,图表将自动更新!

目前,请勿将PhpStorm用于UML图。


我想这是新的(:
Jeffrey04年

正确。目前我处在相同的情况。我开发了系统的复杂部分,并希望为同事可视化它。我尝试了几种工具,但它们又糟又丑:)我将使用PHPStorm进行操作,并更新我的答案,它的外观和功能真正强大。今天我将让您知道结果@ Jeffrey04
Lukas Lukac

没关系,实际上我已经相当一段时间不使用PHP了
Jeffrey04 '17

0

坦白地说,首先,您不应该从代码生成UML模型,而应该从UML模型;)。

即使您处在罕见的情况下,当您需要进行逆向工程时,通常也建议您手动进行或至少整理一下图表,因为自动生成的UML的视觉效果确实很差(=信息)大部分时间都很有价值。

如果您只需要生成图表,那么问自己为什么要这么做可能是一件好事?谁是目标受众,目标是什么?自动生成的图必须提供什么,什么代码不需要?

基本上我只接受一个回答。它太大了,难以理解。

这也是从头开始使用UML而不是开始编码的原因;)它被称为分析,并且正在下降,因为第二个商业人士都认为这有点太昂贵了,并不是真正必需的。


7
的确如此,但是生活比某些明智使用的原则更为复杂。您可能需要将实际代码与原始UML图进行比较,或者分析某人的代码或某些未使用UML图实现的代码。
DAH

3
不同意。通过使用图表可视化代码库/模块而获得了巨大价值。代码就像街道方向,但有时方向太多,可能会发现一张有用的地图。
罗勒·穆萨

1
大多数UML绘图程序的UI都很差,即使您随后丢弃用于生成该图的代码,编写代码并自动生成UML图的速度也会更快 ...
Mikko Rantalainen
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.