php源码逆向工程转化为UML类图

原文: https://blog.csdn.net/xyz_dream/article/details/102502232

通过php源码导出uml类图能够方便我们查看整体项目的类结构,方便我们去阅读源码以及理解。找到一个项目, phuml使用php代码扫描php代码文件,通过extends implements以及注解等形式, 描绘出DOT格式的画图文件,再通过Graphviz软件将DOT图形文件转化为png图片格式,大致原理应该是这样的。

1.项目通过composer安装: https://packagist.org/packages/phuml/phuml

2.官网文档: https://montealegreluis.com/phuml/

3.常用命令:

./vendor/bin/phuml phuml:diagram -r -a -b -i -o -p dot -e classic ./tmp/ example.png

扫描./tmp/目录下所有的php文件,通过dot命令(安装 Graphviz软件)生成 example.png类图文件

例如拿laravel项目作为案例, 大致生成的类图如下:

很简单的就能描绘出类图了。 不过需要对class里面的属性字段数据类型, 方法返回值等写好相应的注解, 这样程序才能通注解拿到更多的信息,描绘出来的类图更加完整 。 使用phpstorm编码, 注解简单就写好了,不用我们手动写。

优点: 跨平台性好,简单方便。 例如网上所谓的 EA软件只能在windows上运行, 并且自己试了一下这个软件只能扫描php5.5版本以下的代码,例如使用数组必须使用array() 使用[]则扫描报错结束。 首先平台兼容性查,其次支持php版本以及代码要求有点高, 而且对于注解是不会扫描的。。。, 总体来说不怎么好用,但是EA这个软件可以自己调整类图, phuml调整不了。

缺点: 目前这个作者是个老外, 应该很久不维护了, 他只描绘出了 继承实现接口普通关联关系 以及 类的属性和方法, 对于 组合关系 聚合关系等没有实现, 有兴趣可以尝试修改源码。 我猜实现原理,应该是通过 phuml将这些php文件都include进来, 之后, 根据反射机制,拿到注解以及每个类的属性,方法,返回值等。 最后描绘成为dot文件, 之后借助dot命令将dot格式的文件转化为png图片。 组合和聚合应该体现在成员属性上, 普通的关联关系应该体现在 方法的参数 返回值等。 这个可以尝试修改源码。

除此之外,还有 http://plantuml.com/zh/index plantuml方案

plantuml方案其实也很爽。 把文件后缀改为.puml, phostorm自动识别并且画好uml图,所见即所得。

推荐github项目工具: https://github.com/davidfuhr/php-plantumlwriter

在线显示plnatuml: https://liveuml.com/

将自己的类图先根据这个工具生成,继承 泛化关系都不用管了。 只需要写一些 组合 聚合 依赖关系即可。

自己基于plantuml做了个小工具,根据php源码目录生成uml类图可以参考:

https://github.com/dream-mo/plantuml

关于dot是什么可以查看我的文章: https://blog.csdn.net/xyz_dream/article/details/88953146