PHP UML Generator

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

156242 次浏览

你试过 Autodia了吗? 上次我试的时候还不是很完美,但是已经足够好了。

还有 Php2xmi。您需要进行一些手工操作,但是它会生成所有的类,所以您需要做的就是将它们拖动到 雨伞中的类图中。

否则,使用反射和 Graphviz 生成图是相当简单的。我有一个片段 这边,您可以使用它作为起点。

还有从 提供的 PHP UML 工具。

PHP _ UML:

  • Can generate UML/XMI files in version 1.4, or in version 2.1 (logical, component, and deployment views)
  • 可以生成 HTML 格式的 API 文档
  • Can generate PHP code (code skeleton) from a given XMI file
  • 可以将 UML/XMI 内容从版本1.4转换为版本2.1

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

$ pear install pear/php_uml

(这以前是 $ pear install pear/php_uml-alpha,但后来软件包变得稳定了。)

生成 xmi:

$ phpuml -o project.xmi

我发现最好的(Windows)软件做 PHP 和 UML 是 斯巴克斯系统公司 企业架构师。除了 特征外,它还支持用于 PHP 的 跟随:

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

不是免费的(199美元) ,但绝对物有所值。

我强烈推荐 BOUML:

  • 是非常快的(有史以来创建的最快的 UML 工具,查看 基准) ,
  • 具有坚如磐石的 PHP 进出口支持(也支持 C + + 、 Java、 Python)
  • 是多平台(Linux,Windows,其他操作系统) ,
  • 它功能齐全,开发得令人印象深刻(看看 发展史,很难相信这么快的进展是可能的)。
  • 支持插件,具有模块化架构(这允许 用户贡献,看起来像 BOUML 社区正在形成)

您可以为 UML 使用可视化范式。这可能不是最好的付费产品(699美元) ,只是作为一个选择,如果有人想尝试。它可以从 PHP 中创建类图,反之亦然,不仅仅是 PHP,还有很多你可以选择的语言,比如 C # 、 C + + 、 Ruby、 Java、 VB.NET、 Python、 Objective C、 Perl 等等。还有一个审判你可以去看看。

下面是我是如何做到的(直接从代码到 PDF 绘图,不需要手工绘制任何东西) :

  1. Use BOUML for "reverse engineering PHP code" [sic] to extract the class model (BOUML is available from "universe" repository of Ubuntu). I seriously recommend BOUML for this step because it's really fast compared to many other programs I have tried. In addition, it seems that BOUML seems to extract the model correctly (for the parts that BOUML even tries to extract).
  2. 使用 BOUML 将模型导出为 XMI 1.4文件
  3. 使用 ArgoUML导入所述 XMI 文件(可以使用 webstart 版本执行此步骤)
  4. 从 ArgoUML 导出 XMI (我不知道输出是哪个 XMI 版本/变体,但它与 BOUML 的输出结果不同。Argouml-Graphviz 不能直接从 BOUML 处理 XMI 文件)。
  5. 使用 Argouml-Graphviz将 ArgoUML 导出的 XMI 文件转换为点格式(由于使用 XSLT2,您可能需要使用 撒克逊人而不是 xsltproc 来使其工作)
  6. 使用 FDP旧金山警察呈现类关系图。

下面是使用 fdp 输出 PDF 图的合适命令行示例(假设 argouml-Graphviz XLST 处理生成的点文件保存为 xmi-model。点) :

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 使用“逆向工程”数据将会有所帮助。

If you are looking to generate UML easily from your existing PHP Classes you might want to consider PHPStorm 3.0 IDE. It does a good job of replicating existing code into UML.

Have a look at the PHP 风暴特性列表.

PhUML

phUML is fully automatic UML class diagramm generator written in PHP, licensed under the BSD license. It is capable of parsing any PHP5 object oriented source code and create an appropriate image representation of the oo structure based on the UML specification.

UML Example

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

步骤指南

老实说,首先也是最重要的是,您不应该从代码中生成 UML 模型,而应该从 UML 模型中生成代码;)。

即使你是在一个罕见的情况下,当你需要做这个逆向工程的时候,通常建议你手工完成,或者至少整理一下图表,因为自动生成的 UML 在大多数情况下都没有很好的可视化价值。

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

基本上我只接受这个问题的一个答案,它变得太庞大和难以理解了。

这也是我们从一开始就使用 UML,而不是从编码开始的原因;)这就是所谓的分析,它正在衰落,因为每个业务人员都认为它有点太昂贵,而且没有必要。

理论上,您可以使用 PhpStorm 使您的类使用 UML 可视化。这个代码并不是很好,但是你可以有效地重构内容,至少可以很好地预览父代、实现、常量、属性、方法以及它们的可见性。

Situation

I want to visualise a communication between already existing components to a colleague.

进程使用 PHPStorm

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

好处

  • 用户界面不错,最终图表。
  • 能够从图表中重构代码。
  • 能够添加笔记。
  • 类图很好地表示了私有/公共属性、构造函数和方法。

缺点

  • 不支持 PHP7。
  • 使用起来很痛苦。无法调整生成的框的大小。
  • 当添加一个新的关系时,前面的关系会随机丢失: o 卧槽?
  • Restarting PhpStorm destroys the diagrams
  • 我改变主意了,不可能利用关系

结果

不管怎样,在一些痛苦的工作小时后,我只能生成不相关的盒子,不得不使用额外的程序来链接关系。非常糟糕。但是我相信一旦他们使它正常工作,这将是一个伟大的功能,因为随着代码的变化,图将自动更新!

现在,不要用 PhpStorm 做 UML 图。