首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >了解大型php代码,使用什么技术?

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

Stack Overflow用户
提问于 2011-04-06 21:22:34
回答 7查看 3.5K关注 0票数 10

我已经被交给了一个应用程序的大型无文档代码,它是用php编写的,因为原始的编码器是AWOL的。我的任务是添加新功能,但如果不理解代码,我就无法做到这一点。老实说,我被大量的源代码淹没了。我发现:

  • 它基于MVC体系结构、数据库持久性、模板和面向对象程序( OOP )编写得很好。
  • 模块化,有基于URL的路由概念,基本模板
  • 使用自定义编写的php框架,它没有documentation.And,没有源代码管理历史记录(oops!)
  • 有超过500个文件,每个文件包含数百行代码。每个文件都有3-4个require_once语句,其中包含大量其他文件,因此很难判断哪个函数/类/方法来自何处。

现在,我正在寻找一些我用来理解这段代码的技术。例如,考虑以下代码片段:

代码语言:javascript
复制
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->视图从何而来?我检查了文件的其余部分,没有名为shared或view的方法。所以很明显,它们来自使用require_once()包含的数百个类中的一个,但是哪一个呢?我怎么知道呢?
  • 我可以得到正在执行的所有函数或方法的列表吗?如果是,那怎么做?
  • 这个类SiteController重写一个基类公共类。但是我不知道这个公共类在哪里。怎么说?

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

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2011-04-06 21:29:04

首先,在这种情况下,我试图获得应用程序概述:某种全局概念:

  • 什么应用程序(不是代码!)有吗?
  • 代码是如何全球组织的:模型、模板、控制器、.
  • 每种类型的组件是如何构造的--一旦您了解了Model类的工作原理,其他组件通常就会以相同的方式工作。

一旦你有了这个全球性的想法,如果你有时间的话,你就有可能开始理解代码是如何工作的,那就是使用PHP调试器。

关于这一点,Xdebug + Eclipse是一种可能性--但几乎所有现代IDE都支持它。

它将允许您一步一步地、逐行地生成一页,了解所称的内容,何时,从何处,.

当然,您不会在整个应用程序中这样做!

但是,由于您的应用程序使用了框架,很有可能应用程序的所有部分都以相同的方式工作--这意味着真正理解一个组件应该有助于更容易地理解另一个组件。

作为几个工具来理解什么称为什么、如何和地点,您可能想看一看:

  • 包涵扩展(引用):允许您在运行时跟踪和转储文件包含和类继承的层次结构。
  • Xdebug + KCacheGrind将允许您生成调用图;XHProf应该做同样的事情。
  • 使用您的IDE (http://eclipse.org/pdt/http://www.zend.com/en/products/studio/http://www.jetbrains.com/phpstorm/http://netbeans.org/features/php/、.),类/方法上的ctrl+click应该会使您看到它的声明。

还要注意的是,应用程序不仅仅是代码:它通常发现反向工程数据库、生成所有表的图表非常有用。

如果你幸运的话,你的数据库里有外键--这样你就能在表之间建立链接,这将帮助你理解它们之间的联系。

票数 10
EN

Stack Overflow用户

发布于 2011-04-06 21:30:21

你需要个IDE。我在PHP中使用netbeans,它工作得很好。这将使您可以通过右键单击并选择“查找哪里定义的”选项或类似的选项来查找home will /home类的位置。

你可以得到一份名单。这叫做堆栈。使用IDE设置类似于xdebug的调试器将允许您这样做。

票数 2
EN

Stack Overflow用户

发布于 2011-04-06 21:32:46

grep是唯一能让我活下来的东西

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5573116

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档