PHP面试重在考察用语言解决真实问题的能力,聚焦数组处理、HTTP状态控制、数据库边界与一致性三类场景,强调项目实操、亲手验证陷阱点及技术决策逻辑。

先搞清面试官到底在考什么
PHP面试不是考你背了多少函数名,而是看你能不能用语言解决真实问题。面试官手里的题库,90%以上来自三类场景:数组处理逻辑、HTTP请求生命周期中的状态控制、数据库操作时的边界与一致性保障。比如问“session_start()为什么必须在输出之前调用”,本质是在验证你是否理解HTTP头发送时机;问“array_merge和+合并关联数组的区别”,实际考察你对键覆盖逻辑和底层行为的实操经验。
按项目线索反推知识点,别堆概念
拿你写过的任意一个项目(哪怕只是个人博客),从入口开始倒推:
- 用户访问
/user/profile→ 路由怎么匹配?控制器里是否用了$_GET或框架 Request 对象?有没有做参数校验? - 查用户数据用了
PDO::prepare()还是直接拼 SQL?有没有处理PDOException?事务包裹了哪些操作? - 渲染页面时,模板里用了
htmlspecialchars()还是直接 echo?有没有 XSS 风险? - 登录态靠
$_SESSION还是 JWT?Session 存 Redis 还是文件?过期时间怎么设?
每个环节暴露一个知识点,比死记“OOP 有封装继承多态”有用十倍。你写的代码就是你的知识地图。
高频陷阱点必须亲手验证
很多知识点光看文档会误判,必须跑一遍:
立即学习“PHP免费学习笔记(深入)”;
-
in_array('1', [0, 1, 2])返回 true 还是 false?—— 松散比较导致类型隐式转换,实际返回true -
isset($arr['key'])和array_key_exists('key', $arr)在$arr = ['key' => null]时结果不同 -
foreach ($obj as $k => $v)能不能遍历没有实现Iterator接口的普通对象?—— 可以,但只遍历 public 属性 -
json_encode(['a' => 1, 'b' => null])输出{"a":1,"b":null},但前端 JS 解析后b是null,不是undefined
这些不是刁难,是线上 bug 的常见源头。面试时你说“我试过”,比说“我记得文档这么写”可信得多。
项目描述要聚焦技术决策点
不要说“我用 Laravel 做了个商城”,要说清楚当时卡在哪、怎么选的、为什么舍弃别的方案:
- “商品库存扣减并发高,一开始用 DB 行锁,但秒杀时出现大量超卖,后来改用 Redis
DECR+ Lua 脚本保证原子性” - “日志原来写文件,单机没问题,上云后日志分散,换成 Monolog + SyslogHandler 推到 ELK”
- “用户上传头像,本地用
move_uploaded_file(),但部署到 Kubernetes 后临时目录不可靠,改用file_get_contents($_FILES['avatar']['tmp_name'])直接读流存 OSS”
技术深度藏在取舍里,而不是工具列表里。面试官真正想听的是你面对约束时的判断逻辑。



















