用于清理垃圾PHP的工具

时间:2009-03-10 19:33:10

标签: php

我刚刚继承了一个70k的PHP代码库,我现在需要添加增强功能。我看到更糟糕,至少这个代码库使用MVC架构并且面向对象。但是,没有模板系统,许多类都被弃用 - 只被调用一次。我认为我的方法可能如下:

  1. 查找实时服务器上48小时内未触及的所有文件,并将其作为删除的候选对象(幸运的是有一个实时服务器)。
  2. 实施模板系统(Smarty)并尝试在模板中找到重复的代码。
  3. 很多方法都复制并粘贴了代码......我不知道我有多想弄乱它。
  4. 我的问题是:我应该采取哪些步骤,或者你会采取什么措施?你处理这个问题的方法是什么?有没有工具可以帮助找到重复的PHP代码?

3 个答案:

答案 0 :(得分:5)

  

查找实时服务器上48小时内未触及的所有文件,并将其作为删除的候选对象(幸运的是有一个实时服务器)

通过“触摸”,我假设您将对文件进行统计,以查看系统的任何部分是否已访问该文件。我要花一个半月而不是48个小时。在较旧的PHP代码库中,您经常会发现存在大量代码,每周一次或每月一次通过本地cron作业调用,或者第三方定期将其作为伪服务远程调用。等待6周后,更有可能捕获所有被调用的文件。

  

实施模板系统(Smarty)并尝试在模板中找到重复的代码。

为什么呢?严肃的问题,是否有理由实施模板系统? (非PHP精明的设计师,通过在视图中包含太多逻辑来帮助您解决问题的开发人员,或者您是创建模板的人,并且您知道您在智能方面比在PHP中工作更快)。如果没有,请避免使用PHP。

另外,实现纯智能模板系统有多现实?我认为像这样的旧PHP系统会有大量的“业务逻辑”与他们的观点混合在一起,而这些观点无法用纯粹的智能实现,如果你允许混合的PHP / Smarty你的开发人员会使用每次PHP。

  

很多方法都复制并粘贴了代码......我不知道我有多想弄乱它。

我不知道任何可以开箱即用的代码分析工具,但是可以用tokenizer functions掀起一些东西。

你应该做什么

我不想劝阻你或让你士气低落,但你为什么要清理这段代码呢?现在它正在做着应该做的事情。愚蠢,但它正在做。每个重新分解项目都会将当前的,未记录的,可能是业务关键的功能置于风险之中,并且在该项工作结束时,您有一个完全相同的应用程序。它是70k行的听起来像伪劣的代码,只有你关心修复,没有其他人告诉你他们的优先事项。如果他们的优先级是干净的代码,他们的代码就已经很干净了。一个人无法改变文化。除非有一个直接的业务案例要清理该代码(将项目作为业务战略开源?),否则遗留代码不会随处可见。

以下是与传统PHP应用程序一起考虑的一组不同的priorties

  1. 是否存在单个数据库对象或一对对象,允许开发人员轻松地为读取(从属)和写入(主)设置单独的连接。许多遗留PHP应用程序将在单个页面调用中实例化到同一数据库的多个连接,这是性能的噩梦。

  2. 开发人员是否有直接的方法来避免SQL注入?为新代码(参数化SQL)提供此代码,并考虑修复旧SQL以使用此新方法,还要考虑可在网络级别执行的安全性步骤。

  3. 获取包含所有遗留代码的某种测试框架,并将其视为黑盒子。使用这些测试来创建一个集中的API,开发人员可以使用它代替无数的函数调用和复制/粘贴他们一直使用的代码。

  4. 为配置值开发一个集中式系统,大多数遗留PHP代码是定义和类常量的一些可怕组合,这意味着任何配置更改都意味着代码推送,这意味着潜在的DOOM。

  5. 开发一个连接到源代码控制系统的lint,以强制所有新代码的代码健全,而不是just for style,但要确保业务逻辑不在视图之外,SQL正在以安全的方式构建,不使用那些旧的复制/粘贴库等。

  6. 开发一个理智,可跟踪的构建和/或推送系统,阻止人们对生产中的代码进行hackin

答案 1 :(得分:3)

我不知道任何特定的工具,但我一直致力于重新分解一些相当大的PHP项目。

我会推荐一个模板系统,Smarty或严格的PHP系统,可以清楚地向任何参与该项目的人解释。

采取离散的,可管理的部分并定期重新考虑因素(例如,本周,我将重新编写此部分)。不要咀嚼超过你可以咀嚼的东西,也不打算做完全重写。

另外,我会对可疑的函数和文件进行常规代码搜索(我使用Eclipse并搜索项目中的文件)。有些人太害怕无法做出重大改变,但我宁愿在大胆的方面犯错,而不是接受混乱和组织不良的代码。准备好测试,测试,测试!

答案 2 :(得分:1)

您需要确定重构的可靠理由。删除重复的代码并不是一个非常好的代码;它需要与真正理想的改进相结合,例如减少内存占用(如果网络服务器正在挣扎,则非常有用)。

记住这一点后,现在就可以开始重构了。并确保您也拥有版本控制存储库。只是不要检查破损的代码。

不要对一次性课程太仓促。许多小型PHP框架都是这样工作的。但是,他们通常可以更好地抽象出来。此外,许多PHP代码也不理解数据层抽象,结果是存在通过业务逻辑甚至显示代码散布的SQL代码。这个问题通常没有自定义数据库处理程序,如果你突然不得不教它复制或缓存,这是一个问题。这是另一个方向的抽象问题。

一个非常实际的步骤:一旦你开始抽象重复的代码,你就会找到打开多个文件的理由。如果您使用的是shell和Unix编辑器,那么屏幕将极大地帮助您。

相关问题