大型 PHP 应用程序的依赖关系图

Posted

技术标签:

【中文标题】大型 PHP 应用程序的依赖关系图【英文标题】:Dependencies graph for large PHP application 【发布时间】:2013-09-14 00:20:17 【问题描述】:

我最近继承了一个没有对象/模块/命名空间的大型 php 应用程序......只有很多包含函数的文件。

当然,有很多依赖项(以及所有文件,几乎总是包括在内)。

我正在寻找一种可以分析文件并生成依赖关系图的工具。然后检测独立文件/文件集并重构整个事情会更容易。

到目前为止,我发现的best solution 是编写一个 CodeSniffer 嗅探器来检测所有函数调用,然后使用它来生成图形。

它似乎对其他人有用,所以我确信已经存在用于它的工具。

你会推荐什么?

【问题讨论】:

【参考方案1】:

我认为最好的解决方案是使用 doc generator + grapviz,PHPDocumentor 看起来在 https://github.com/phpDocumentor/GraphViz 有一个 Grapviz 扩展

这是一个使用 PHPDocumentor 制作的示例: http://demo.phpdoc.org/Clean/graphs/classes.svg

您也可以使用像 xhprof (https://github.com/facebook/xhprof) 这样的分层分析器,这可以绘制一个包含执行中的所有函数调用的树。

Graphviz 完成的 xhprof 绘制示例

【讨论】:

在 laravel 4 项目应用文件夹上执行,但没有在图中显示所有依赖项【参考方案2】:

我可以推荐一个我几天前写的轻量级项目。基本上我有一个 300 多个文件的 PHP 项目,我想检测这些文件需要/包含哪些文件,反之亦然。此外,我想检查每个单独的文件该文件需要/包含哪些文件(直接或间接,即通过文件继承),反之亦然:包含此特定文件的文件是什么。对于这些的任何组合,我想要一个交互式依赖图(基于文件包含而不是类/函数调用/使用)。

查看project's sandbox 及其source code。

请注意,整篇文章只用了 2 天就写完了,所以不要评判它 太苛刻了。重要的是它正在做它的工作!

【讨论】:

以上是关于大型 PHP 应用程序的依赖关系图的主要内容,如果未能解决你的问题,请参考以下文章

Java学习笔记UML基础

扩展图神经网络:暴力堆叠模型深度并不可取

干货 | 扩展图神经网络:暴力堆叠模型深度并不可取

Dart/Flutter 中的依赖关系图?

CI关系图

程序依赖图(Program Dependency Graph)