Press "Enter" to skip to content

使用PHP_UML生成代码的UML图

在读别人代码的时候, 在没有详细文档的时候, 如何快速的看清整个代码的结构(类结构), 就成为了一个现实的问题.
今天我就介绍一种, 自动生成UML图的方法.
假设, 我有一个项目文件夹:laruence, 在这个文件夹上有一个文件Root.php(事实上, 无论多级目录, 多个文件, 都可以).

<?php
abstract class Root {
    private $instance;
    abstract public function Hi();
}
interface Intro {
    public function Say();
}
class Sub extends Root implements Intro {
    private $instance;
    public function Say() {
        echo "I am Laruence";
    }
    public function Hi() {
        echo "Hello!";
    }
}
?>

首先, 我们要使用PHP_UML(PHP_UML)根据代码生成XMI.
使用方法比较简单, 在安装PHP_UML以后, 运行:

 phpuml laruence/ -o laruence.xmi -n laruence -f xmi  --pure-object --no-deployment-view  --no-component-view --no-docblocks

会得到一个laruence.xmi文件, phpuml的具体参数可以通过phpuml --help了解.
有了xmi以后, 如何转成UML图呢?
Visio2007不支持导入XMI, 我找到了另外的一个工具:Altova Umodel, 这个工具可以支持XMI到UML图的转换, 需要注册, 不过提供了30天的使用许可(大家要是有更好的替换方案, 欢迎补充).
在Umodel导入laruence.xmi以后 ,生成UML图, 就得到了如下的PNG:

UML图
UML图

是不是很方便呢?
另外PHP_UML还可以生成html格式, 做为一种doc gen工具也不错. 更可以通过xmi生成PHP文件.

21 Comments

  1. ho1
    ho1 May 14, 2017

    @Laruence 您好,我按照http://www.laruence.com/2010/05/14/1473.html 使用php_uml在linux生成的xmi文件,使用了很多uml工具都无法导入这个xmi文件,即使你提到的altova官网因为回复说只给合作商试用其他人不可试用只能购买而作罢,您有没有好办法能指点我一下?某些工具会提示我的XMI文件中:xmi Documentation exporter=PEAR反斜杠PHP_UML 不可知的exporter我是xmi2.1的版本,去掉或修改这个属性均无法导入xmi文件。请教了。

  2. ho
    ho May 14, 2017

    @Laruence 您好,我按照http://www.laruence.com/2010/05/14/1473.html 使用php_uml在linux生成的xmi文件,使用了很多uml工具都无法导入这个xmi文件,即使你提到的altova官网因为回复说只给合作商试用其他人不可试用只能购买而作罢,您有没有好办法能指点我一下?某些工具会提示我的XMI文件中: 不可知的exporter我是xmi2.1的版本,去掉或修改这个属性均无法导入xmi文件。请教了。

  3. Dario
    Dario January 16, 2015

    I am regular visitor, how are you everybody? This post posted
    at this web site is really good.
    site [Dario]

  4. bluse
    bluse October 23, 2014

    推荐使用Umbrello UML Modeller
    直接读取xmi文件,不过目前支持xmi version1.2 所以在phpuml转换的时候要加上 -x 1参数。
    http://umbrello.kde.org/

  5. 云上旭
    云上旭 July 21, 2014

    鸟哥,你觉得 StarUML 和 :Altova Umodel 哪个更适合做PHP UML呢?

  6. ikodota
    ikodota August 19, 2013

    OK了,才看到Altova UModel 可以导入xmi。

  7. ikodota
    ikodota August 19, 2013

    整个过程中,遇到不少麻烦。
    1.pear安装的时候提示需要xsl.
    2.本机的php5.3.5中不含php_xsl.dll扩展,下载了好几个版本的dll都无效,最后在 php5.3.27中找到。
    3.由于本地php在d:\program files(x86)\php\下, 路径含括号,也不能正确执行 phpuml 生成.xmi文件(看了下是类似xml的格式)。
    4.用Altova UModel打开 xmi文件时,提示不能打开。

  8. 梧桐
    梧桐 April 5, 2011

    bouml可以识别xmi1和xmi2版本,基本上可以符合要求了。。ArgoUML据说也是支持xmi1的,不过我没测试

  9. tirisfal
    tirisfal August 11, 2010

    如果是导出html,怎么支持utf-8呢?

  10. lake
    lake July 16, 2010

    好东西,谢谢,今晚有得折腾了。哈哈

  11. 雪候鸟
    雪候鸟 June 5, 2010

    @luckgo 正是, 正是, 多谢指正, 已经修改.

  12. luckgo
    luckgo June 5, 2010

    我折腾到深夜,装了Altova MapForce,但怎么也找不到导入xmi的菜单,倒是在google上找到Altova Umodel导入xmi的介绍,请问Laruence,是不是你搞错了耶?

  13. 玉丰
    玉丰 May 18, 2010

    哈哈,去试试。还有,建议换个验证码,现在这个太难用了。

  14. 雪候鸟
    雪候鸟 May 14, 2010

    @cc0cc 有, visio 03据说有个插件, 可以把UML图导出成XMI. PHP_UML就可以根据XMI生成PHP代码了, 当然, mapForce也可以导出XMI

  15. toms
    toms May 14, 2010

    要是能进一步识别程序的调用关系就更好啦

  16. cc0cc
    cc0cc May 14, 2010

    哥学社不遗余力地顶起,有没有反向的办法,通过uml生成php代码?

Comments are closed.