【问题标题】:PHP UML Generator [closed]PHP UML 生成器 [关闭]
【发布时间】:2010-09-28 11:03:03
【问题描述】:

如何根据 PHP 中已有的类生成 UML 图?

【问题讨论】:

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

标签: php uml class-diagram


【解决方案1】:

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

【讨论】:

  • 出于某种原因,pear.com 不喜欢没有尾部斜杠的链接:pear.php.net/package/PHP_UML
  • @Stephen,是的,我也注意到了!如果你点击链接,它会给你一个 404,但如果你选择地址栏并按回车,它就可以了。
  • 几年后命令现在是pear install PHP_UML-1.6.1(见pear.php.net/package/PHP_UML/download/Allpear.php.net/package/PHP_UML
  • 安装了 1.6.2 版本,但出现错误:'phpuml' 不是内部或外部命令,
  • 不适用于 php 7
【解决方案2】:

我强烈推荐BOUML

  • 速度极快(有史以来最快的 UML 工具,请查看benchmarks),
  • 拥有坚如磐石的PHP导入和导出支持(还支持C++、Java、Python)
  • 是多平台(Linux、Windows、其他操作系统),
  • 功能齐全,令人印象深刻的密集开发(看看development history,很难相信如此快速的进步是可能的)。
  • 支持插件,具有模块化架构(这允许user contributions,看起来 BOUML 社区正在形成)

【讨论】:

  • BOUML 的网页现在声明:“注意:由于维基百科的人不断违反许可证、攻击和侮辱 [...],我决定停止在 Bouml 上的工作,除非修复错误。”
  • @MPV - 我可以从 Ubuntu 软件中心安装它
  • “[2011 年 12 月 18 日] 下载暂停,直至另行通知”从他们的官方网站。 http://bouml.free.fr/download.html - 这是因为我需要一个 Win7 版本。我想它可能仍然可以从 Ubuntu 存储库中获得 - 需要检查
  • @ValRedchenko BOUML 5.0.1 于 2012 年 2 月 22 日发布。 它仍然可用。
  • 6.1 版发布于 2012 年 9 月 23 日。看来发展又回暖了。没有关于减速、停止等的通知bouml.fr/historic.html
【解决方案3】:

phUML

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

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

Step by step guide

【讨论】:

  • 需要SVN/subversion才能下载,并没有真正说明源代码的license是什么,但是看起来不错!是的,我会小心查看源代码,上面绝对没有许可证,唯一的自述文件在我认为的网站上
  • 许可证链接在项目的网站侧边栏中,作者为 Creative Commons:creativecommons.org/licenses/by-nc-sa/3.0
  • 这是网站内容的许可,项目的许可必须包含在项目本身中。
  • 我向作者 Jakob 发送了一封电子邮件,他回复了对存储库的更新,并以清晰明了的3-clause bsd License
  • 我下载了这个并经过一番修改后让它工作。真的很不错,除了我无法让关联工作,但我相信我会弄清楚的。不错,很简单。虽然没有 GUI,但没什么大不了的。
【解决方案4】:

我发现做 PHP 和 UML 的最好 (Windows) 软件是 Sparx Systems Enterprise Architect。除了大量的features,它还支持PHP的following

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

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

【讨论】:

  • 哇,这确实是一个非常有用和专业的程序,谢谢你的提示!!我刚刚尝试了使用 Sparx EA 从 PHP 源代码的逆向工程方法生成的 UML 类图,它就像一个魅力,我很震惊它的效果如何。 :D 随着我们的项目越来越大,我们创建的对象越来越多,关注我们自己的代码变得越来越困难,但这对它有很大帮助,因为它以正确的方式生成 UML 图(当然,可能会出现异常)在我们完成代码之后。这甚至有助于简化对象之间的关系。
  • @ax - 我是一个新手,我在他们的功能列表中有点迷失(在“比较版本”下)。允许我输入 PHP 代码(或链接到 PHP 文件)并获得图表作为回报的功能的名称是什么?试图找出我可能需要哪个版本。
【解决方案5】:

你试过Autodia 了吗?上次我尝试它并不完美,但已经足够了。

【讨论】:

  • 我尝试了 autodia,但不知何故我无法生成准确的类图 (php5)
【解决方案6】:

还有php2xmi。你必须做一些手工工作,但它会生成所有的类,所以你要做的就是将它们拖到Umbrello的类图中。

否则,使用反射和 graphviz 生成图表相当简单。我有一个 sn-p over here,您可以将其用作起点。

【讨论】:

    【解决方案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 文件转换为点格式(由于使用 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 使用“逆向工程”数据会有所帮助。

    【讨论】:

      【解决方案8】:

      如果您希望从现有的 PHP 类轻松生成 UML,您可能需要考虑 PHPStorm 3.0 IDE。它在将现有代码复制到 UML 方面做得很好。

      看看PHP Storm feature list

      【讨论】:

      • 不可视化依赖关系,只有继承。
      【解决方案9】:

      理论上,您可以使用 PhpStorm 通过 UML 可视化您的类。这一代不是很好,但你可以有效地重构东西,至少以一种很好的方式预览父级、实现、常量、属性、方法和它们的可见性。

      情况

      我想将现有组件之间的通信可视化给同事。

      使用 PHPStorm 处理

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

      优势

      • 漂亮的 UI,最终图表。
      • 能够重构图表中的代码。
      • 能够添加注释。
      • 类图很好地象征了私有/公共属性、构造函数、方法。

      缺点

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

      结果

      无论如何,经过一段痛苦的工作后,我只能生成不相关的框,并且不得不使用额外的程序来链接关系。特别糟糕。但我相信一旦他们让它正常工作,这将是一个很棒的功能,因为随着代码的变化,图表会自动更新!

      目前,不要将 PhpStorm 用于 UML 图。

      【讨论】:

        【解决方案10】:

        您可以将 Visual Paradigm 用于 UML。这可能不是收入最高(699 美元)的产品,如果有人想尝试,可以作为一个选择。它可以从 PHP 创建类图,反之亦然,不仅是 PHP,还有很多语言可供选择,例如 C#、C++、Ruby、Java、VB.NET、Python、Objective C、Perl 等。还有一个您可以查看试用版。

        【讨论】:

          【解决方案11】:

          老实说,首先你不应该从代码生成 UML 模型,而是从 UML 模型生成代码;)。

          即使你是在极少数情况下,当你需要做这个逆向工程时,一般建议你手工做,或者至少整理一下图表,因为自动生成的 UML 视觉效果很差( =信息)大部分时间都很有价值。

          如果您只需要生成图表,最好问问自己究竟为什么?谁是目标受众,目标是什么?自动生成的图表必须提供什么,哪些代码没有?

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

          这也是首先从 UML 开始的原因,而不是开始编码 ;) 它被称为分析,并且正在下降,因为每个业务人员都认为它有点太贵而且没有必要。

          【讨论】:

          • 没错,但生活比一些原则更复杂,使用这些原则是明智的。您可能需要将实际代码与原始 UML 图进行比较,或者分析某人的代码或某些代码,这些代码是在没有 UML 图的情况下实现的。
          • 不同意。用图表可视化代码库/模块获得了巨大的价值。代码就像街道方向,但方向太多,有时人们可能会发现地图很有用。
          • 大多数 UML 绘图程序的 UI 都很糟糕,以至于编写代码并自动生成 UML 图会更快,即使您随后丢弃了过去使用的代码生成图表...
          猜你喜欢
          • 2013-12-15
          • 1970-01-01
          • 2012-05-20
          • 2011-03-01
          • 1970-01-01
          • 2011-09-04
          • 2012-12-02
          • 2011-10-25
          • 2011-11-05
          相关资源
          最近更新 更多