如何修复旧的编码风格php脚本

如何修复旧的编码风格php脚本,php,oop,coding-style,Php,Oop,Coding Style,关于如何开始修复旧式php脚本,有什么建议吗 几天前,我收到了一份开发一个旧PHP项目的报价,所谓老式,我的意思是该结构没有使用OOP编码方法,也没有明确的框架 我不知道从哪里开始,想知道开发旧脚本有哪些方法 注意:他们不想花很多钱开始一个新项目 那么,您建议用什么方法来更新旧的php脚本呢?这取决于您所说的“旧”是什么意思。旧的是为PHP4编写的吗?还是像在非OOP中一样旧?(或者两者都有?) 与PHP4一样古老: 只要您对它进行筛选,或者抑制警告,或者实际修复不推荐的函数调用,一切都应该是好

关于如何开始修复旧式php脚本,有什么建议吗

几天前,我收到了一份开发一个旧PHP项目的报价,所谓老式,我的意思是该结构没有使用OOP编码方法,也没有明确的框架

我不知道从哪里开始,想知道开发旧脚本有哪些方法

注意:他们不想花很多钱开始一个新项目


那么,您建议用什么方法来更新旧的php脚本呢?

这取决于您所说的“旧”是什么意思。旧的是为PHP4编写的吗?还是像在非OOP中一样旧?(或者两者都有?)

与PHP4一样古老:
只要您对它进行筛选,或者抑制警告,或者实际修复不推荐的函数调用,一切都应该是好的。这简直是无聊的工作。简单又便宜

与非OOP中的一样古老:

理论上,人们可以在没有面向对象编程或明确的MVC(或其他)框架的情况下开发一个非常稳定和可扩展的应用程序。事实上,如果应用程序规模很小,就没有理由添加OOP或框架的意大利面和肉丸子复杂性。用某种框架在OOP中重新编写所有内容既困难又昂贵。而且很可能是矫枉过正。

你能给我们提供更多的细节,也许是一个例子


甚至过程代码也包含OOP元素。您可以识别与同一实体相关的变量和过程。你可以着手重写它,但他们很难从中找到价值,特别是如果他们像你建议的那样节俭的话。

也许你现在的代码是这样的

你想让它看起来像这样

如果它只是一个脚本,而不是整个项目,我会将其转换为OOP编码标准。

“[网景]犯了任何软件公司都可能犯的最严重的战略错误:他们决定从头重写代码。”

因此,无论您采取何种行动,首要任务都是使用现有代码。重构将是您可以使用的最佳方法之一


如果代码库没有更新,您有什么不能做的,您绝对必须这样做?要使该操作成为可能,您需要升级多少和哪些内容?考虑这两个问题。

当我这样做时,这是一个多步骤的过程。通常,有一个现有的产品可以继续运行。从零开始重写很少是一种选择,即使你最终会这么做

  • 在可能的情况下,开始放弃手动include语句并实现自动加载器(需要多次通过)
  • 创建一个助手脚本来模拟魔术引号和注册全局变量。这样您就可以在PHP中关闭它,同时保持现有代码运行
  • 如果适用,逐渐删除多余的strip_斜线或add_斜线调用。助手脚本允许您对每个文件执行此操作
  • 确保变量具有适当的作用域
  • 分离出您的演示代码。考虑SMARTY或备用模板系统
  • 将DB调用移动到PDO,并对所有内容使用参数替换
  • 查看代码并考虑删除一个前端控制器
然后我查看项目并确定如何改变逻辑本身。通常,如果根本没有函数,我的第一步就是将常见行为包装到静态方法中。无需付出太多的努力就可以获得同样多的重用,因此我还不关心组织

在冗余减少后,我进入组织。在这个阶段,我开始规划我的类模型,并将函数重构为干净的方法。这也是进行自动测试(phpunit)的时候了。一旦我有足够的信心,我添加一些控制器并集成模板,然后我就完成了。。。禁止一个或两个以上的通行证


对我来说,这一切都是关于确定我在哪里,我想在哪里,并制定一个可以在几个小步骤中执行的计划。每个人都有自己的目标,所以除了你自己的,没有什么神奇的计划可以遵循。

阅读他们的代码。和他们谈谈

根据现有代码查看请求的更改。和他们谈谈

决定你想做什么就改变多少。和他们谈谈

那样做。和他们谈谈

当他们要求通过重写比修改更容易实现的功能时,请这样做


使用可以帮助重构的IDE。

问题中提到了非OOP。我认为非OOP和非框架本身根本不是一个缺陷。如果应用程序能够正常工作并且可以合理维护,没有OOP或框架并不是开始修改代码的好理由。糟糕的安全实践(如系统性SQL和HTML注入)和较差的可维护性(许多PHP应用程序缺少注释、操作逻辑与表示的错误混合、没有结构、缩进或一致的操作方式) —​ 这些都是更新/重写的好理由。我现在正在用PHP编写一些东西,我不使用框架或OOP。我认为框架只是小型应用程序中的额外负担,我从来都不关心在PHP中如何处理OOP。但我也不是那种认为“如果实际代码没有至少5级的继承,那么应用程序的结构就不正确”的人,PHP甚至有一个
goto
关键字吗?所以你建议我和那些愚蠢的商人谈谈,我的主要目标是确保这个项目的安全,并以一种我可以稳定这个项目的方式来发展它。如果没有他们的支持,你肯定无法做到这一点。你提到了“注意:他们不想在开始一个新项目上花很多钱。”这种活动有项目管理的味道,而不是编程。顺便说一句:如果他们有钱花,他们不可能是“愚蠢的商人”