使遗留 PHP 应用程序现代化或重构的最佳方法是什么

What is the best way to modernize or refactor a legacy PHP application

我面临着重构和向遗留 PHP 网站添加新功能的挑战 "application",它由大约 788 个 php 脚本组成,没有文件夹结构,它们在大部分脚本中包含 JavaScript、PHP、HTML 和 CSS 代码在同一个文件中,脚本持久化并使用来自 3 个不同数据库的数据类型、MSSQL、MYSQL 和 DB2,身份验证是基于会话的,其中大部分是基本的 php,还有一些页面使用纯 html 和 ajax 进行通信php 脚本,不用说没有 class 定义,大部分甚至没有功能。

我的目标是将其转化为更易于维护的应用程序,最有可能使用我熟悉的 symfony 组件,引入 HTTP 请求抽象、路由,如果可能的话还引入 MVC,还将代码重构为可用 class es 并使用 composer 实现自动加载以利用 3rd 方库。

坦率地说,我唯一的选择就是放弃所有这些并开始一个新项目。

即使全部重写似乎是最好的主意,但有时这并不是最佳的业务选择,而且对于庞大的代码库来说可能相当困难。

一种解决方案是引入一个Symfony项目,然后开始一个模块一个模块地重构,但是你主要会面临以下问题:

  • Web 服务器集成:如何启动 symfony 应用程序和遗留应用程序(例如使用自定义 nginx 位置)
  • 在 2 个应用程序之间共享会话,但是 symfony 已经有东西可以 bridge a legacy Application with Symfony Sessions
  • 拥有一致的网页设计,这需要很多工作,但技术上并不难
  • 我想还有很多问题

我认为将遗留应用程序包装在 symfony 控制器中可能是一个不错的解决方案。

https://www.youtube.com/watch?v=WbBf4p4FcqA&t=348s

https://stovepipe.systems/post/migrating-your-project-to-symfony

所以你

  • 保持应用程序遗留代码正常工作
  • 你可以编写功能测试
  • 实现新功能或将一些遗留代码移植到 symfony

2019 年以后您可以使用即时重构

我是 Rector, tool that can migrate huge amount of PHP files in few seconds. E.g. upgrade PHP 5.3 to PHP 7.4, upgrade Symfony 2.8 to 4.2 or migrate from Nette to Symfony (read the case study) 的作者。

Spaghetti 到 MVC 集是未来的功能之一(已经很少有项目感兴趣)。但是开箱即用地支持上述功能,但您也可以添加自己的规则 来迁移您的特定代码。

Read more on Github repository.