【问题标题】:How to fix an old coding style php script如何修复旧的编码风格 php 脚本
【发布时间】:2011-01-11 22:40:57
【问题描述】:

对于如何开始修复老式 php 脚本有什么建议吗?

前几天我收到了一个开发旧PHP项目的offer,我所说的老式是指该结构没有使用OOP编码方法,它没有明确的框架。

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

注意:他们不想花很多钱来启动一个新项目。

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

【问题讨论】:

  • 我不认为非 OOP 和非框架本身就是一个缺陷。您可以编写完美的 PHP 应用程序,而无需其中任何一个,并且如果应用程序正在运行并且可以合理维护,那么没有 OOP 或框架不是开始更改代码的好理由。糟糕的安全实践(例如,系统的 SQL 和 HTML 注入)和糟糕的可维护性(许多 PHP 应用程序缺乏 cmets、动作逻辑与表示的糟糕混合、没有结构、缩进或一致的做事方式) — 这些都是很好的理由更新/重写。
  • 我现在正在用 PHP 编码一些东西,我不使用框架或 OOP。我认为框架只是一个小应用程序中的额外包袱,我从来不关心如何在 PHP 中处理 OOP。但我也不是那种认为“如果执行工作的实际代码没有至少 5 度的继承,那么应用程序的结构就不正确”

标签: php oop coding-style


【解决方案1】:

这取决于您所说的“旧”是什么意思。旧的为 PHP 4 编写的?还是像非 OOP 一样旧? (或两者兼而有之?)

PHP4 中的旧版本:
只要您筛选它并抑制警告或实际修复不推荐使用的函数调用,一切都应该没问题。这简直就是无聊的工作。简单又便宜。

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

【讨论】:

  • 问题中显示非 OOP。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    也许您的代码现在看起来像这样

    你希望它看起来像这样

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

    【讨论】:

    • PHP 有没有 goto 关键字?
    【解决方案4】:

    Joel Spolsky writes:

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

    因此,无论您采取何种行动,优先考虑的是使用现有代码。重构将是您可以使用的最佳方法之一。

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

    【讨论】:

      【解决方案5】:

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

      • 开始放弃手动包含语句并在可能的情况下实现自动加载器(需要多次通过)
      • 创建一个帮助脚本来模拟魔术引号和注册全局变量。这样您就可以在 PHP 中将其关闭,同时保持现有代码运行
      • 如果适用,逐步删除过多的 strip_slashes 或 add_slashes 调用。帮助程序脚本允许您按文件执行此操作。
      • 确保您的变量具有适当的范围
      • 分离出您的演示文稿代码。考虑 Smarty 或替代模板系统
      • 将 DB 调用移至 PDO 并对所有内容使用参数替换
      • 查看代码并考虑将前端控制器存根

      然后我查看项目并确定我将如何更改逻辑本身。通常,如果根本没有函数,我的第一步是将常见行为封装到静态方法中。无需太多努力即可获得尽可能多的重用,因此我还不关心组织。

      减少冗余后,我开始组织。正是在这个阶段,我开始规划我的类模型并将函数重构为干净的方法。这也是自动化测试(phpunit)的时代。一旦我有足够的信心,我就会添加一些控制器并集成模板,然后我就完成了……除非再经过一两次。

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

      【讨论】:

      • 我喜欢这个答案,它的东西:D 告诉我更多关于 PDO 的信息
      • PDO 是 PHP 的 OOP 数据库库。它提供迭代器、准备好的语句和一致的接口。 php.net/PDO
      【解决方案6】:

      阅读他们的代码。与他们交谈。

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

      决定你改变多少来做想做的事。与他们交谈。

      这样做。与他们交谈。

      当他们要求通过重写比修改更容易完成的功能时,这样做。

      使用可以帮助重构的 IDE。

      【讨论】:

      • 所以你建议我和那些愚蠢的商人谈谈,我的主要目标是保护这个项目并以我可以稳定项目的方式开发它
      • 如果没有他们的支持,您肯定无法做到这一点。你提到了一些关于“注意:他们不想在开始一个新项目上花很多钱。”这种活动有点项目管理的味道,而不是编程。 BTW:如果他们有钱可以花在编程上并且足够了解不要花太多钱,他们就不可能成为“愚蠢的商人”!小心被视为无法进行简单更改的“愚蠢的程序员”。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-21
      • 2013-08-16
      • 1970-01-01
      • 2013-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多