【发布时间】:2010-09-28 11:03:03
【问题描述】:
如何根据 PHP 中已有的类生成 UML 图?
【问题讨论】:
-
我不再使用 PHP,所以我没有代码来实际测试。当我发布这篇文章时,最初的答案都还不够,但从那以后发生了很多变化。我使用的是 PHP 5.2,现在是 PHP7。
标签: php uml class-diagram
如何根据 PHP 中已有的类生成 UML 图?
【问题讨论】:
标签: php uml class-diagram
pear 还提供 PHP UML 工具。
PHP_UML:
通过以下方式在命令行上安装它:
$ pear install pear/php_uml
(以前是$ pear install pear/php_uml-alpha,但该包已经稳定了。)
生成你的 xmi:
$ phpuml -o project.xmi
【讨论】:
pear install PHP_UML-1.6.1(见pear.php.net/package/PHP_UML/download/All 或pear.php.net/package/PHP_UML)
我强烈推荐BOUML:
【讨论】:
phUML 是用 PHP 编写的全自动 UML 类图表生成器,在 BSD 许可下获得许可。它能够解析任何 PHP5 面向对象的源代码,并根据 UML 规范创建 oo 结构的适当图像表示。
./phuml -r /var/www/my_project -graphviz -createAssociations false -neato out.png
【讨论】:
我发现做 PHP 和 UML 的最好 (Windows) 软件是 Sparx Systems Enterprise Architect。除了大量的features,它还支持PHP的following:
不是免费的(199 美元),但绝对物有所值。
【讨论】:
你试过Autodia 了吗?上次我尝试它并不完美,但已经足够了。
【讨论】:
我是这样做的(直接从代码到 PDF 绘图,无需手动绘制任何东西):
下面是使用fdp输出PDF图表的合适命令行示例(假设argouml-graphviz XLST处理生成的dot文件保存为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_UML 或 php2xmi 而不是 BOUML 来执行“逆向工程”部分。我还没试过。
(我使用“逆向工程”这个词,因为似乎 UML 人在使用这些词时表示从源代码中提取类和方法信息。我会亲自解释这些词从可执行二进制文件或捕获的原始数据中提取信息。)
如果您更喜欢手工绘制类图(而不是使用计算机完成所有绘制),您可以使用 BOUML 或 ArgoUML 进行绘制。在这种情况下,通过 BOUML 使用“逆向工程”数据会有所帮助。
【讨论】:
如果您希望从现有的 PHP 类轻松生成 UML,您可能需要考虑 PHPStorm 3.0 IDE。它在将现有代码复制到 UML 方面做得很好。
【讨论】:
理论上,您可以使用 PhpStorm 通过 UML 可视化您的类。这一代不是很好,但你可以有效地重构东西,至少以一种很好的方式预览父级、实现、常量、属性、方法和它们的可见性。
情况
我想将现有组件之间的通信可视化给同事。
使用 PHPStorm 处理
https://blog.jetbrains.com/phpstorm/2017/09/uml-diagrams-in-phpstorm-2017-2/
优势
缺点
结果
无论如何,经过一段痛苦的工作后,我只能生成不相关的框,并且不得不使用额外的程序来链接关系。特别糟糕。但我相信一旦他们让它正常工作,这将是一个很棒的功能,因为随着代码的变化,图表会自动更新!
目前,不要将 PhpStorm 用于 UML 图。
【讨论】:
您可以将 Visual Paradigm 用于 UML。这可能不是收入最高(699 美元)的产品,如果有人想尝试,可以作为一个选择。它可以从 PHP 创建类图,反之亦然,不仅是 PHP,还有很多语言可供选择,例如 C#、C++、Ruby、Java、VB.NET、Python、Objective C、Perl 等。还有一个您可以查看试用版。
【讨论】:
老实说,首先你不应该从代码生成 UML 模型,而是从 UML 模型生成代码;)。
即使你是在极少数情况下,当你需要做这个逆向工程时,一般建议你手工做,或者至少整理一下图表,因为自动生成的 UML 视觉效果很差( =信息)大部分时间都很有价值。
如果您只需要生成图表,最好问问自己究竟为什么?谁是目标受众,目标是什么?自动生成的图表必须提供什么,哪些代码没有?
基本上我只接受这个问题的一个答案。它太大了,难以理解。
这也是首先从 UML 开始的原因,而不是开始编码 ;) 它被称为分析,并且正在下降,因为每个业务人员都认为它有点太贵而且没有必要。
【讨论】: