PHP 高频追问

1. 你为什么核心业务更喜欢用 PHP,而不是全部换成 Go?

推荐回答

我不会从语言好坏去看,而是从业务特点看。像复杂业务规则、后台配置、状态流转、和产品运营频繁协作这类场景,PHP 的开发效率和团队协作成本更有优势。 Go 我也会用,但我更倾向把它放在实时链路、高并发服务、消费者和批处理这类更适合服务化的场景。

你可以挂回项目

  • 海外业务平台:订阅、支付、退款、后台规则更适合 PHP
  • 推广 ROI 线:后台和配置用 PHP,实时链路和消费者用 Go

2. PHP 做复杂业务时,你最看重什么?

推荐回答

我最看重三件事:

  1. 业务状态模型是不是清楚
  2. 边界和异常流是不是提前想清楚
  3. 后续扩展和治理是不是可控

很多人把 PHP 理解成“写接口快”,但我更关心它能不能把复杂规则真正稳定落地。


3. PHP-FPM 打满了你怎么排查?

推荐回答

我会先分层看:

  1. 是业务慢还是依赖慢
  2. 是慢 SQL 还是外部接口超时
  3. 是偶发峰值还是持续打满
  4. 有没有缓存命中不足或某些热点请求

如果是 PHP-FPM 本身打满,我会结合慢日志、请求分布、数据库和外部依赖去看,而不是只调大 worker 数。 调参数只能缓解,真正要解决还是得回到慢链路本身。


4. PHP 项目怎么做依赖注入和解耦?

推荐回答

我的理解是依赖注入不是为了框架感,而是为了把业务逻辑和具体实现解耦。 比如支付、消息通知、三方渠道适配、模型能力接入,这些都适合通过接口和容器做抽象,这样后面扩展新渠道或替换实现成本更低。

项目里怎么讲

你可以讲不同支付渠道、不同广告渠道、不同 AI 能力接入都适合走这套抽象。


5. PHP 怎么做高并发?

推荐回答

PHP 本身不是高并发问题的全部答案。真正做高并发时,我更关注:

  • 缓存
  • 异步解耦
  • 限流
  • 幂等
  • 热点隔离
  • 把不适合 PHP 同步处理的部分拆到 Go / MQ / 后台任务

也就是说,PHP 在复杂业务主链路里完全可以很好用,但不能把所有高峰压力都堆在同步请求里。


6. Swoole 和传统 PHP-FPM 你怎么选?

推荐回答

如果是典型后台和复杂业务系统,我更习惯传统 PHP-FPM,因为模型清晰、治理成熟。 如果场景是长连接、WebSocket、协程并发、实时流式处理,Swoole 更有价值。 我会根据场景选,不会为了“更快”就盲目上 Swoole。


7. 你怎么避免 PHP 项目越做越乱?

推荐回答

我会重点抓这几个点:

  • 模块边界清楚
  • 状态定义清楚
  • 统一返回和错误码
  • 关键逻辑服务化
  • 日志和监控先补齐
  • 公共能力抽象但不过度设计

业务复杂时,最怕的不是代码多,而是规则散、状态乱、异常全靠猜。


8. PHP 做支付 / 订阅链路最难的是什么?

推荐回答

不是把回调接上,而是状态一致性。 比如支付成功、退款、恢复订阅、回调乱序、重复通知、权益同步,这些都可能同时影响同一笔业务。 我一般会先把状态机定义清楚,再通过幂等、补偿和关键日志把异常流兜住。


9. PHP 里你怎么做代码可维护性?

推荐回答

我比较重视的是:

  • 业务规则不要散在 controller 里
  • 复杂链路下沉到 service / domain 层
  • DTO / VO / 枚举 / 状态机清晰
  • 接口契约和测试点先明确
  • 公共逻辑抽象要有边界,避免过度封装

10. 技术总监如果问“你是高级 PHP 工程师的依据是什么”,你怎么答?

推荐回答

我觉得不是因为我会多少语法点,而是我长期用 PHP 承接复杂业务系统,包括订阅、支付、退款、交易、后台和多服务协同。 我做的不是单点接口,而是业务建模、方案拆解、状态治理、联调上线和问题治理,这些更接近高级 PHP 工程师真正的职责。