当原始编码员擅离职守时,我收到了用 php 编写的大量未记录的应用程序代码。我的任务是添加新功能,但如果不理解代码我就无法做到这一点。我开始四处寻找。老实说,我对源代码的数量感到不知所措。我发现:
- 基于 MVC 架构、数据库持久性、模板和 OOP 编写得很好
- 模块化,有基于URL的路由概念,基本模板
- 使用没有文档的自定义编写的 php 框架。并且没有源代码控制历史(糟糕!)
- 有 500 多个文件,每个文件包含数百行代码。每个文件都有 3-4 个 require_once 语句,其中包含大量其他文件,因此很难判断哪个函数/类/方法来自哪里
现在我正在寻找一些我用来理解这段代码的技巧。例如,考虑以下代码片段:
class SiteController extends Common {
private $shared;
private $view;
protected function init(){
$this->loadShared();
$this->loadView();
}
private function loadShared(){
$this->shared = new Home();
}
private function loadView(){
$this->view = new HomeView();
}
我想知道
- HomeView() 和 Home() 在哪里定义? $this->shared & this->view 从何而来?我检查了文件的其余部分,没有名为 shared 或 view 的方法。很明显,它们来自使用 require_once() 包含的数百个类中的一个,但是哪一个呢?我怎样才能知道?
- 我能否获得所有正在执行的函数或方法的列表?如果是,那么如何?
- 这个类 SiteController 重写基 Common 类。但是我找不到这个 Common 类在哪里。如何判断?
此外,请分享一些用于理解用 php 编写的现有代码的技术?
最佳答案
首先,在这种情况下,我试图获得一个应用程序概览:某种全局概念:
- 应用程序(不是代码!) 做什么
- 代码是如何全局组织的:模型、模板、 Controller ……在哪里?
- 每种类型的组件是如何构建的 - 一旦您知道模型类的工作方式,其他组件通常也会以相同的方式工作。
一旦你有了这个全局想法,开始理解代码如何工作的可能性,如果你有一些时间,那就是使用 PHP 调试器。
关于那个,Xdebug + Eclipse PDT 是一种可能性——但几乎所有现代 IDE 都支持它。
它将允许您逐步、逐行地完成页面的生成,了解调用的内容、时间、位置...
当然,您不会对整个应用程序都这样做!
但是当您的应用程序使用框架时,应用程序的所有部分很有可能以相同的方式工作——这意味着真正理解一个组件应该有助于更容易地理解另一个组件。
作为了解什么调用什么、如何调用以及在何处调用的两个工具,您可能想看看:
- inclued extension (quoting):允许您在运行时跟踪并转储文件包含和类继承的层次结构
- Xdebug + KCacheGrind将允许您生成调用图; XHProf应该做同样的事情。
- 使用您的 IDE ( Eclipse PDT , Zend Studio , phpStorm , netbeans , ...),按住 ctrl 并单击一个类/方法应该会带您进入它的声明。
另请注意,应用程序不仅仅是代码:通常发现对数据库进行逆向工程以生成所有表的图表非常有用。
如果你幸运的话,你的数据库中有外键——这样你就可以在表之间建立链接;这将帮助您了解它们之间的关系。
关于php - 了解大型 php 代码,使用什么技术?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5573116/