了解大型PHP代码,使用什么技术?

Cur*_*ind 9 php static-analysis reverse-engineering

我已经移交了一个用PHP编写的应用程序的大型无证代码,因为原始编码器已经AWOL了.我的任务是添加新功能,但如果不了解代码,我就无法做到这一点.我开始探索.老实说,我对源代码的数量感到不知所措.我已经找到:

  • 它基于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();
}
Run Code Online (Sandbox Code Playgroud)

我想知道

  • 其中HomeView()家庭()被定义?哪里$这个- >共享这个- >观点从何而来?我检查了文件的其余部分,没有名为shared或view的方法.很明显,他们来自使用require_once()包含的数百个类中的一个但是哪一个?我该怎么知道?
  • 我可以获得正在执行的所有函数或方法的列表吗?如果是,那怎么样?
  • 此类SiteController重写基类Common类.但是我无法找出这个Common类的位置.怎么说?

此外,请分享一些用于理解用PHP编写的现有代码的技术?

Pas*_*TIN 9

首先,在这种情况下,我尝试概述应用程序:某种全球性的想法:

  • 应用程序(不是代码!)的作用
  • 代码如何全局组织:模型,模板,控制器,......
  • 每种类型的组件的结构 - 一旦您知道Model类如何工作,其他组件通常以相同的方式工作.


一旦你有了这个全球性的想法,如果你有一些时间,开始理解代码如何工作的可能性是使用PHP调试器.
关于这一点,Xdebug + Eclipse PDT是一种可能性 - 但几乎所有现代IDE都支持它.

它将允许您逐步,逐行地完成页面的生成,理解所谓的,何时,何地,......

当然,你不会为整个应用程序做到这一点!
但是,当您的应用程序使用框架时,应用程序的所有部分都很有可能以相同的方式工作 - 这意味着真正理解一个组件应该有助于更容易地理解另一个组件.


作为一些工具来了解什么叫做什么,怎么做以及在哪里,你可能想看看:


另请注意,应用程序不仅仅是代码:它经常发现对数据库进行反向工程非常有用,可以生成所有表的图表.

如果幸运的话,你的数据库中有外键 - 你可以通过这种方式在表之间建立链接; 这将有助于您了解它们之间的相互关系.