
现有的项目背景,已经平稳运行了有接近 10 年了。所有的拓展、报表、API 等全部基于 PHP7 Laravel 5.2 进行的开发,最终目标是升级到最新的 Laravel 12
简单的使用 find . -type f -name "*.php" | wc -l 发现有接近 7500 个 php 文件。
升级的原因是老板认为版本过老,有潜在的漏洞风险。
关于新的 leader ,目测有 20 年以上的开发经验,但他几乎不懂 php ,有.net react nodejs 的开发经验,Claude code Max 忠实用户,最近又新开了几个 Max 账号给其它三位 php 开发。
目前执行到了第一步,先简单的从 5.2 升级到 5.3 试试水,让 Claude/Chat-GPT 生成了大概 12 个步骤,每个步骤都单独进行 git commit ,整体执行下来已经消耗了整月 20%的 token ,升完后遇到 bug 喂给 Claude 解决,一直反复进行。
三位同事的反馈是 Claude 升级的时候会改现有的业务逻辑,需要大量的时间去 review 代码。
各位有没有使用过 AI 来进行老项目升级的经历?
1 collery 62 天前 除非你现在的人员特别清晰系统代码、逻辑以及相应功能点,不然不能一口气吃个胖子。 建议拆分 灰度 新项目这种弄 |
2 Moyyyyyyyyyyye PRO 属于 AI 带来的自信心膨胀,按道理平稳为什么升级,开拓新业务新方向不行吗 o()o |
3 swananan 62 天前 升级原因感觉就经不起推敲,很明显风险大于收益。 Claude Code 或者 Codex 我觉得是具备做老项目升级的能力的,但是就跟普通开发去重构老业务一样,非常懂业务的老开发都可能被埋坑里爬不出来。如果你不给 Claude Code 和 Codex 提供足够详细的业务背景,完善的测试来兜底。那这么大规模的修改,不踩坑就奇怪了。 另外,至少小规模按模块迭代,分批次上线吧,一口气改完是什么,开着飞机换引擎,一定要挑战最高难度吗,哈哈 |
4 liuliuliuliu PRO 这个不用想,100%完成不了,而且 php 还不好测试,这就更困难了。 |
![]() | 5 Zhuzhuchenyan 62 天前 只借助 Claude Code 到 Laravel 12 很困难吧,查了一下 Laravel 12 是 2025 年 3 月 7 日发布的,而 Claude Sonnet 4.5 的知识截止日期是 2025 年 1 月 Claude Sonnet 4.5 has a knowledge cutoff date of Jan 2025. This means the models’ knowledge base is most extensive and reliable on information and events up to Jan 2025. 我司目前还没在大项目上完全依赖 AI 做升级,倒是在几个代码量小的 Nest.js 和 Angular 项目中测试过 AI 跨一个大版本升级的能力,怎么说呢,还凑合,相较于人类工程师来说并没有节省很多时间。因为还是需要大量的时间去审阅所有的改动。 |
6 et5494 62 天前 现在不太适合直接应用于整个完成的复杂的生态 在这种项目中 AI 会增加添加很多“创新” 我们项目之前玩过,后面放弃了,工作量太大 一个微信小游戏项目 |
7 Hyxiao 62 天前 可以尝试把老服务单独,可抽离的,拆分出新的服务出去,慢慢去迭代。 |
8 jarl 62 天前 骂他 sb |
9 Georgedoe 62 天前 这跟只写代码不调试有什么区别 , 没测试用例保障, AI 给你业务改了都不知道啊 |
10 Ketteiron 62 天前 大型项目想使用 AI 简单重构不太现实,投入大量时间是必然的。 我的建议是直接用最新版重写,或者换语言,或者什么都别做,这取决于开发资源有多少。 如果只是为了解决"漏洞",升级后还有会别的漏洞,现有代码迁移到新环境可能有新的运行时隐患,如果只是一次性投入开发资源解决旧版本隐患,说实话没多大意义。 |
11 YanSeven 62 天前 这个就如同完全让”智驾”在路上狂飙一样让人心惊胆战。 |
12 hejw19970413 62 天前 升级不如重写,重写不如不写 |
13 spritecn 62 天前 这比重写一个工作量大 |
14 NoobPhper 62 天前 说明你领导 什么都不懂, 对软件工程没有敬畏之心, 最基本的 ROI 都估不出来 |
15 version 62 天前 想要避免漏洞.那就写中间件转发请求呢..用 nodejs 都行..这样随时微服务隔离后续的开发.旧的代码包一层监控起来.. 现在的机器性能.没啥性能瓶颈.无限套娃请求都无所谓的.花那时间还不如加硬件配置.. Ai 写很多旧业务都模拟不完.. 也有可能说说而已..不然怎么入职..最终会妥协最小改动 |
16 gitjcc 62 天前 跨度太大了,升级不如重写 +1 |
17 Chaidu 62 天前 一步到位,从 5.2 直接升到 8.4 ,也别去检查代码,出问题就甩锅给领导和 AI |
18 wysnxzm 62 天前 手里有锤看什么都是钉,砸到手就老实了 |
19 HENQIGUAI 62 天前 这种感觉行不通,AI 现阶段虽然强,但还是不能无视软件工程这么多年的基本法。 |
20 bojue 62 天前 Claude 帮我写前端,模版式的 CRUE 项目开发没任何问题,但是我的编辑器配置部分给我写崩了 |
21 MIUIOS 62 天前 出了问题他可以背锅的话随便升,如果是开发背的话,当我没说 |
22 jhdxr 62 天前 1. 我个人经验 laravel 在你们没定制底层的基础上兼容性其实是很好的。有很多老的方法现在不推荐使用(甚至文档上完全没有相关踪迹),但依然是可以使用的。(例如 model 里自定义属性以前是用同名方法现在是用 Attribute ;鉴权以前可能是在 controller 的前置 filter 或 middleware 里完全自己写逻辑现在推荐用 guard ) 2. 个人经验,单纯的依赖 AI ,它会把很多老的方法改成最新的推荐的写法,这当然没错,但没必要,尤其是一次性改这么多是毫无疑问不推荐的。。。 3. 建议是直接 composer 硬升版本,然后把 bug 丢给 AI 去解决 4. 更好的做法是让 AI 先去写一堆 test cases ,然后再升级 |
23 Duanye7X24 62 天前 这不纯纯的给你送经验吗?锅他背,你去实践积累经验 |
24 acerphoenix 62 天前 上面所有同学说的反对意见都很正确,贴合实际,但作为旁观者,我倒是想看看这么升级的进展, 反正我自己肯定不这么搞 |
25 Kevin2 62 天前 via Android 重构火葬场 |
26 way2create 62 天前 代码另说,各种文档完善吗? |
27 beneo 62 天前 建议先看《重构》这本书 |
28 abc0123xyz 62 天前 复杂业务不太好处理。 另外这么久的项目,我怀疑重构时候要从代码倒推业务,或者从业务猜代码啥意思... |
29 jjianwen68 62 天前 大概这 leader 不等升级完就跑路了 |
30 mightofcode 62 天前 能找这个 leader 买几个 max 账户吗 |
31 wonderfulcxm 62 天前 via iPhone 我也升级了一个 PHP 项目,从 php5.6 升级到 8.3 ,Wordpress 从 4.x 升级到 6.8 ,wp 的向下兼容做得还不够错,遇到的错误和警告 ai 基本能处理。有些插件已经没人再升级维护了,我用 ai 修复了里面的写法。 |
32 imnpc 62 天前 Ai 目前做不了这个 ,没有最新的训练数据 1.PHP 版本变化 用法不同 2.Laravel 每个版本都有配置文件和相关用法变更 3.各种组件包类库不兼容 composer 需要升级对应的包 AI 无法做到自动识别 https://laravelshift.com/ 去这里花钱升级吧 能一步步给你从最低版本升到最新 只不过价格有点贵 |
33 zhanghb 62 天前 正在用 max 重构一个 java 8 项目,一定要文档先行、小步验证。步子稍微一大就乱成一锅粥。已经踩过坑回退了一大批代码重头开始了。 |
34 Mithril 62 天前 你要想在这公司长期工作,那最好不要碰。 想要赚一笔走人就没问题。升级完了今年的 KPI 就有了,年终奖到手就辞职,你管它明年坑不坑呢。 你猜你的技术 leader 是哪一种? |
35 tojike 62 天前 |
36 Varobjs 62 天前 要不你和 leader 提议吓,要玩就玩彻底点,还换什么 laravel 12 ,直接换语言,换数据库 |
37 sagnitude 62 天前 干这事除了做着好玩,他对公司产生了什么价值?有点太搞了,还不如把 claude max 的钱发成补贴,让大家多开开 code review 会 |
38 javalaw2010 62 天前 正如#22 所说,laravel 的兼容性确实很不错,不过这里面最大的麻烦不是 laravel 版本升级而是 php 版本升级。我其实觉得没必要一个版本号一个版本号的升,直接一步到位 5.2->12, 如果担心风险太大可以 nginx 层面做个分流,一个接口一个接口的改,渐进式迁移,改完一批接口观察一段时间,没问题就升级下一批,虽说有 7500 个文件,但我料想真的要修改的 PHP 文件没有那么多,拍脑袋估一下可能 20%~40%。 不过讲道理,CC 并不太适合处理这个,可以试一下付费方案 https://laravelshift.com/ ,99 刀的订阅,大概会比这个性价比高不少吧。 |
39 br_wang 62 天前 单测全吗?是不是人来维护单测代码,Claude 修改业务代码,好一点…… |
40 ZztGqk 62 天前 via iPhone ai 改的很快,但 review 要挺久的 |
41 Jaeger 62 天前 总结这 10 年来的项目痛点,然后重新思考项目架构,然后渐进式重构,用新的服务代替旧的服务。甚至还可以考虑使用 golang 代替 PHP ,PHP 用的人已经不多了。 |
42 wmwgijol28 62 天前 不如新建项目,按功能版块 API 一批一批迁移. |
43 NotLongNil 62 天前 ai 在动态类型语言上面,很容易出错 |
44 encro 62 天前 这是一个 sb , 一来就干这种事, 哪怕干成了, 也让老板容易对 AI 和开发产生误解。 |
45 laminux29 62 天前 现在的 AI 有 2 个问题,第一是单个对话 session 的显存、内存、存储空间不够,导致提问细节多了后,AI 会漏掉很多细节。第二个问题是,AI 在很多领域缺少知识投喂,比如 AI 极难搞定正确地统计 doc 、docx 的页面数量、一行代码写入 crontab 之类的需要研究与测试的内容。 AI 现在正确的用法是,同时用多款 AI ;让 AI 每次只解决一个小问题;让 AI 当助手而不是让它主导。 |
46 TabGre 62 天前 via iPhone 怕不是脑袋秀逗 AI 不是这样玩的 |
47 wsseo 62 天前 我建议升级。失败了可以看一乐,成功了可以为总结经验。 |
48 iOCZS 62 天前 跟蒙眼狂奔有何差别。。。 |
49 scys 62 天前 AI 升级大项目,短时间内跑完还好点,如果超过几个月,你会发现,里面竟然是几个不同思路的大佬在开天坑。 |
50 huaweii 62 天前 via Android 注意是「新来的」 leader ,属于没活嗯整烂货。而且他上面居然没人比他更懂这种搞法的风险,不叫停?这个公司感觉 |
51 facebook47 62 天前 via Android 这种升级,不如重做,既不动现有代码,又可以从优化的角度去升级、重构项目 |
52 tanxnative 62 天前 其实我也想用 golang 重写很多中间件,但是 ai 居然开始胡说了 |
53 maddot 62 天前 https://laravelshift.com/ 用过一次,真的挺牛的,4.2 -> 12, 升级后需要手工改的地方很少 |
54 BALDOOR 62 天前 佩服,我们小项目,100 个左右文件,都不敢这样搞 PHP 大版本和 Laravel 大版本升级,都是新建项目,复制旧文件一步步对着 IDE 检测提示重写的 然后人工填数据测试几次 AI 写代码,我们现在只用在代码提示和一些简单的,收敛且封闭的功能 AI 的幻觉很严重的,漏掉的东西也很多,直接写甚至比 review AI 写的快多了 |
55 Greendays 62 天前 很合理的想法啊,试试看呗。 |
56 xi4oh4o 62 天前 我从 5 升级到 12 照着文档一步一步来就行,搭配 codex |
57 luziafy 62 天前 没活硬整啊,要么不升级,要么找个人对照 PHP 跟 Laravel 每个版本的升级文档修改就行了,并不复杂 |
58 zy0829 62 天前 就问一个问题,出问题怎么算? |
59 qicaisedeyun 62 天前 你们公司产品做的啥项目?哪个行业的? |
60 bugsnail 62 天前 |
61 forbreak 62 天前 没活硬整,升级就准备加班吧。 不说 AI 识别不识别到不同版本的语法了,单就业务逻辑这块真能 100%复刻出来吗? |
62 ldw4033 62 天前 大佬觉得 AI 可以在帮他再创辉煌 |
63 Suaxi 62 天前 |
64 Smileh 62 天前 5.5 都好升级到 12 5.2 要麻烦很多 |
65 arthurblake 62 天前 万年定律:代码能跑就别动 |
66 lance07 62 天前 @javalaw2010 六百六十六,还有这种东西的 |
67 adgfr32 62 天前 via Android php 项目升级难度大,因为很多问题只有运行时才会被发现 laravel 更难,因为他特别喜欢用反射,充满了魔法 |
68 vegeta2ex 62 天前 祖传代码也敢动,到时候崩了让他自己去修 bug |
69 junkk 62 天前 不如让 ai 好好和老板科普一下会不会有安全问题 哪怕把现有的关键业务拆分成微服务呢? 做这事风险高收益低 |
70 halobugTurbo 62 天前 新来的都喜欢重构,不然 PPT 说什么呢。 |
71 binge921 62 天前 这种纯是徒增工作量,性价比极低 |
72 mandex 62 天前 我目前的项目在用 PHP 8.4 + Laravel 12 ,项目开始的时候是 PHP 7.x + Laravel 6.x ,具体版本忘记了。期间经历了多次升级,还是比较顺畅的。 我觉得项目不是特别特别大的话,按版本一个一个升级上去是可以的。 我是说人工操作啊,Claude 不好说,没试过让 Claude 干这么大的活。 |
73 PaulSamuelson 62 天前 所以你们公司,没有新业务么? |
75 worldqiuzhi 62 天前 via iPhone 我一个简单模块让他重构都不行。 需要把他拆成十几个小的。再 review 加测试 |
76 Promtheus 62 天前 人升级的代码都不可靠,更何况是 ai 。它升级的代码你们敢用吗。而且还是这种很老的项目,里面不知道有多少暗坑。。 |
77 guanhui07 62 天前 出问题得他背锅 |
78 jinsongzhaocn 62 天前 Claude 是遇强则强,反之遇到菜鸟依旧菜,还有些没 Claude 经验的老手,则看能不能适应转变了。总之学习能力非常重要。至于技术 Leader ,基本都是自己的想法打动了领导,于是拿着领导的资源,验证自己的想法,最大弊端就是,不是自己的资源,失败就跑路,没有背水一战的觉悟。 |
79 ty29022 62 天前 via iPhone 楼上的都在胡说八道 勇敢的先行者啊 我建议你们抛开一切顾虑开始实践 当然别忘了之后在社区分享你们的经验 |
80 cwliang 62 天前 不知道这 20 年经验的 leader 咋想的,这种纯技术栈的升级对业务来讲带来不了任何收益,风险大于收益。安全性提升、开发体验提升、维护性提升,业务是感知不到的,但出了事绝对被骂 |
81 uNoBrain 62 天前 弱类型语言重构简直是噩梦,项目越大越难搞 |
82 chenjk 62 天前 自掘坟墓 |
83 lguan 62 天前 10 年的项目,这 10 年中间都没有逐步跟上发展.... |
85 loloX 62 天前 我觉得你这个领导说的没错,你们的版本太低了! 但是你们应该优先去查看框架的文档按照官方的意见升级,而不是 AI-first 。遇到问题用 AI 给方案,但是代码最好还是自己动手写,让 AI 起到辅助的作用。 |
86 akakidz 62 天前 别说重构了,你直接做一个新功能,AI 实现后也没办法直接用。 让他配合项目经理和测试,先重构一个核心模块试试 要废多大功夫 |
88 lovelive1024 62 天前 送他两个字母 |
89 yl20181003 62 天前 让他升,成了老板再刷刷短视频就要裁人了,不成,就是他拉一坨大的,真是秀逗了 |
90 1daydayde 62 天前 典型的把 L2 当自动驾驶了啊 |
91 jonsmith 62 天前 经常一个 bug ,AI 能绕半天也解决不了。目测最后让你们人肉填坑。 |
92 visper 62 天前 很明显,leader 在领导面前吹 ai 多厉害领导全部信了,等下领导觉得很简单都是 ai 修改下就完了。 |
93 SayHelloHi 62 天前 开发人员重构老项目 坑都一大堆 用 AI 来重构 感觉有点不现实~ |
94 William97 62 天前 啧啧啧,改吧,到时候填坑时心态会爆炸的 |
95 BraveChi 62 天前 via iPhone 可以升级,但是你不能不测试啊?测试各种业务场景才是是否成功的保障 |
96 fangdaidai 62 天前 中层想要业绩就是这样的,弄出来就可以吹一把,苦的还是下面的人 |
97 celaraze 62 天前 laravel 我熟啊,从 5.5 开始 laravel 步入一个新的阶段,服务提供者注册的机制改变了,你从 5.2 到 5.3 没多大意义,我建议你先到 5.5 ,然后 5.5 到 6 的时候也是一个过渡,6+ 以后就可以按照文档的升级说明来了。 其实你完全可以参考每个版本的升级手册,laravel 这点是做的很好的。要啥 AI 。 https://learnku.com/docs/laravel/5.3/upgrade/1148 |
99 cherryas 62 天前 起码我重构了一个内部项目,性能爆炸提高。 |
100 agentrouter 62 天前 我的建议的话,你们真想用 AI 来做,先用 AI 把测试覆盖率拉起来,干到 100%;然后再让 AI 升级;建议是一个版本一个版本跳。每跳一个版本,过一遍测试,然后检查看看有没有啥问题。没啥问题继续往上跳。直到完成目标。 |