PHP UML生成器

118

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


3
我不再使用PHP,所以我没有可供测试的代码。在我发布这篇文章时,初始答案都没有做到足够好,但是现在情况已经改变很多了。我曾经使用的是PHP 5.2版本,但现在已经更新到了PHP7。 - Jeffrey04
11个回答

43

此外,还可以使用来自pear的PHP UML工具。

PHP_UML:

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

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

$ pear install pear/php_uml

(以前是$ pear install pear/php_uml-alpha,但该软件包现已稳定。)

生成您的xmi:

$ phpuml -o project.xmi


2
由于某种原因,pear.com 不喜欢没有尾随斜杠的链接: http://pear.php.net/package/PHP_UML/ - Stephen Fuhry
1
@Stephen,是的,我也注意到了!如果你点击链接,会出现404错误,但是如果你选择地址栏并按下回车键,它就可以工作了。 - nickf
1
几年后,命令现在是 pear install PHP_UML-1.6.1(请参见 http://pear.php.net/package/PHP_UML/download/All 或 http://pear.php.net/package/PHP_UML/)。 - Ben
安装了1.6.2版本,但出现错误:“phpuml”不被识别为内部或外部命令, - Dariux
4
不能与PHP 7一起使用。 - DevWL
@DevWL:这并不令人感到意外——如果你感到慷慨的话,作者/维护者可能会很高兴得到帮助,使其能够与PHP 7一起工作。 - kguest

43

我强烈推荐BOUML,因为:

  • 它非常快(是有史以来最快的UML工具,可以查看基准测试),
  • 具有坚实的PHP导入和导出支持(还支持C ++、Java、Python),
  • 是多平台的(Linux、Windows、其他操作系统),
  • 功能齐全,开发非常积极(看看开发历程,很难相信会有如此快速的进展)。
  • 支持插件,具有模块化架构(这允许用户贡献,看起来BOUML社区正在形成)

6
BOUML的网页现在声明: “注意:由于持续的许可证侵犯、攻击和来自维基百科人员的侮辱,我已决定停止BOUML的开发工作,除非修复错误。” - MPV
@MPV - 我可以从Ubuntu软件中心安装它。 - Imran Omar Bukhsh
1
【2011年12月18日】下载功能已暂停,直至另行通知。该信息来自其官方网站:http://bouml.free.fr/download.html。此操作是因为我需要适用于Win7的版本。我想在Ubuntu仓库中依然可以找到该软件-需要进行核实。 - Val Redchenko
@ValRedchenko BOUML 5.0.1于2012年2月22日发布。仍然可用。 - Shiplu Mokaddim
5
版本6.1发布于2012年9月23日。看起来开发又重新启动了。没有关于减缓、停止等方面的通知。http://www.bouml.fr/historic.html - Andrew Ensley
1
文档太糟糕了,我从来没搞清楚如何生成一个图表。也许你可以写一个教程。 - unifreak

26

phUML

phUML是一个完全自动的UML类图生成器,用PHP编写,遵循BSD许可证。它能够解析任何PHP5面向对象的源代码,并基于UML规范创建适当的oo结构图像表示。

UML Example

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

逐步指南


需要使用SVN/Subversion进行下载,但并没有明确说明源代码的许可证,不过看起来不错!是的,我会小心地查看源代码,因为它上面完全没有许可证,唯一的自述文件在网站上。 - user9903
4
我给作者Jakob发送了一封电子邮件,他回复了一个更新版本的代码仓库,并附上了清晰明确的3条款BSD许可证 - Anthony Hatzopoulos
我喜欢“点”输出样式,它会将所有对象线性排列,而不是在整个项目类文件夹上使用星形(neato)形状和关联:~/phuml/app/phuml -r ~/path_to_your/classes/ -graphviz -createAssociations true -dot ~/output_folder/test_dot.png - Anthony Hatzopoulos
Jakob Westhoff 的原始版本已从他的网站中删除;我在 https://github.com/greenantdotcom/phUML 找到了一个分支。 - Mikko Rantalainen
@MikkoRantalainen 官方的 Github 仓库是 https://github.com/jakobwesthoff/phuml (我已经更新了答案) - Anthony Hatzopoulos
显示剩余3条评论

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
你尝试过Autodia吗?上次我尝试时它不是很完美,但已经足够好了。

我尝试了Autodia,但不知何故无法生成准确的类图(PHP5)。 - Jeffrey04

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 文件转换为 dot 格式(由于使用了 XSLT2,您可能需要使用 saxon 而不是 xsltproc 才能使其正常工作)
  6. 使用 dotfdpsfdp 渲染类图。
以下是使用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_UMLphp2xmi来代替BOUML进行“反向工程”部分。我还没有尝试过这个。
(我使用“反向工程”这个词组,因为似乎UML人士在指提取类和方法信息时都使用这些词语,而我个人会将这些词语解释为从可执行二进制文件或捕获的原始线路数据中提取信息。)
如果您更喜欢手绘类图(而不是使用计算机进行所有绘制),则可以使用BOUML或ArgoUML进行绘制。在这种情况下,通过BOUML“反向工程”的数据将有所帮助。

5
如果您想从现有的PHP类轻松生成UML图,您可能需要考虑使用PHPStorm 3.0 IDE。它可以很好地将现有代码复制到UML中。
请查看 PHP Storm 功能列表

2
仅显示继承关系,不可视化依赖关系。 - Basil Musa

2
你可以使用Visual Paradigm for UML。这可能不是最好的付费产品(价格为699美元),只是一个选项,如果有人想尝试的话。它可以从PHP创建类图,反之亦然,不仅限于PHP,还有许多语言可供选择,例如C#,C ++,Ruby,Java,VB.NET,Python,Objective C,Perl等。还有一个试用版供您查看。

我试用了这个工具,在Visual Paradigm中被称为“即时反向”,非常惊人。我使用了一个我在Symphony上构建的控制器模块,UML类图是预期的结果!这次我正在寻找一个开源服务,主要原因是为了“扩展”并且不需要与开发团队进行互动。我希望将这个文档过程作为CI流水线上的一个工作来实施(也许我会面临很多挑战)。 - Franco Gil

2
理论上,您可以使用PhpStorm来使用UML可视化您的类。生成效果不是很好,但您可以有效地重构代码,并以良好的方式预览父项、实现、常量、属性、方法及其可见性。 情况 我想向同事展示已有组件之间的通信关系。 使用PHPStorm的过程 请参考https://blog.jetbrains.com/phpstorm/2017/09/uml-diagrams-in-phpstorm-2017-2/ 优点
  • 漂亮的用户界面,最终的图表。
  • 能够从图表中重构代码。
  • 可以添加注释。
  • 类图形象地表示了私有/公共属性、构造函数和方法。
缺点
  • 不支持PHP 7。
  • 使用起来非常痛苦,无法调整生成的框的大小。
  • 当添加新关系时,先前的关系会随机丢失:O wtf?
  • 重新启动PhpStorm会破坏图表。
  • 改变主意后,关系无法使用。
结果 经过一些痛苦的工作后,我只能生成不相关的框,并且必须使用其他程序来链接关系。真的很糟糕。但我相信,一旦他们使其正常工作,这将是一个很棒的功能,因为随着代码的更改,图表将自动更新! 目前,不要使用PhpStorm进行UML图表。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接