哈喽大家好,我是你们的老朋友。最近后台好多小伙伴跑来问我,说马上要面试 PHP 了,心里完全没底,不知道该复习啥。网上一搜资料吧,要么太旧,要么乱七八糟一大堆,根本抓不住面试官爱问的那些重点,愁得头发都快薅秃了。
说实话,这种感受我太懂了,谁不是这么过来的呢。我之前面试也踩过不少坑,后面自己慢慢总结,发现 PHP 面试翻来覆去其实就那么些核心东西。今天就掏心窝子跟大家唠唠,我把当下最高频的 PHP 基础、原理、框架、数据库这些知识点,全用大白话给你们拆解一遍。咱不整那些虚头巴脑的,你理解了,面试就能聊得头头是道,根本不用死记硬背。
建议先收藏,没事就翻出来看看,妥妥的面试定心丸。
一、PHP 基础核心面试考点

基础这块,面试官最爱问的就是变量、常量、超全局变量这些,但咱不背概念,直接说人话。
变量前面加个 $ 符号,PHP 是弱类型语言,意思就是你不用提前声明这变量是整数还是字符串,赋值的时候它自己就认了。比如 $name = "老王"; 就完事儿。
常量嘛,一般用 define('SITE_NAME', '我的博客'); 或者 const SITE_NAME = '我的博客'; 定死一个值,后面改不了。面试常挖坑的点是:const 只能在类里面用或者在顶级作用域定义,而且定义时就得赋值,define 可以在任何地方,还能用在 if 语句里,这个细节知道了就行。
超全局变量就更常用了,$_GET、$_POST 用来接前端传过来的数据,$_SESSION 存会话信息,$_COOKIE 放一些浏览器端的小数据。咱就是说,你自己写个项目,这些天天用,面试的时候别光背名字,直接说“我项目里用户登录后就是用 $_SESSION 存用户 ID 的”,比啥都好使。
还有一个经典的坑,就是 值传递和引用传递 。你一看代码就懂:
// 值传递
$a = 1;
$b = $a; // 相当于把 $a 的值复制了一份给 $b
$b = 2; // $b 改了,$a 还是 1,各过各的
// 引用传递
$c = 1;
$d = &$c; // 加个 & 符号,相当于 $d 和 $c 共用一个房子
$d = 3; // 现在 $c 也变成 3 了
这玩意儿怎么记呢?值传递就像你抄了一份作业,你改你的抄写本,人家原版一点没动。引用传递就厉害了,俩人看同一本作业,谁在上面涂改,另外一个人看到的也是改过的。面试问到直接这么举例,面试官肯定觉得你真懂了。
二、数组、字符串常问原理题

PHP 里数组真的太能打了,什么都能装。面试官喜欢揪着问你,数组底层咋存的,为啥能这么快。
咱不用看源码也大概能理解,PHP 的数组其实底层是哈希表,你给个 key,它能直接算出来这个 key 存在内存哪个位置,所以查找起来飞快。你记着这个就行,万一被问到,直接说底层基于哈希表,时间复杂度 O(1),够用了。
字符串处理也老被问。比如字符串拼接用 . 号,还有个效率问题:在循环里别老用 $str .= 'xxx' 这样拼命拼,因为字符串每次拼接可能会重新分配内存,数据量大的时候就慢了。你可以说“我亲测,大数据量拼字符串,最好用数组 implode,能快不少”。这种自己动手试过的经验,说出来特真实。
再就是字符串函数,strlen() 是算字节数,不是字符数,碰到中文就得用 mb_strlen(),因为一个中文 UTF-8 占三个字节呢。这个小细节面试官可爱问了,也容易掉坑。
三、ThinkPHP 框架高频面试问题
现在用 ThinkPHP 的小伙伴还是很多,面试几乎必问框架原理。你不用把源码背下来,但几个核心东西得能唠。
一个是 依赖注入,听着吓人,其实简单。你就想,平时在控制器里用某个类,是不是经常这样写:$obj = new SomeClass(); ?那依赖注入就是不让你手动 new,而是直接在方法参数里写上类型,框架自动帮你把对象创建好传进来。比如 public function index(UserService $user) ,那 $user 就能直接用,解耦又好测,多省心啊。
再就是 中间件,这玩意儿就是一道门。所有请求进来,先过中间件这一关,你可以在这干点检查登录、写日志、拦截脏请求的活儿。咱平时做接口鉴权,写个中间件验证 token,贼方便。
还有ORM,其实就是让你用面向对象的方式操作数据库,不用写 raw SQL。比如查用户:User::where('status', 1)->select(); ,多直观。面试官可能会问你 ORM 咋防止 SQL 注入,你记着,它底层用了参数绑定,会把传进去的值安全处理,你只要不自己去拼接原始 SQL,基本没问题。
四、MySQL 索引、优化必问知识点

数据库这块是重灾区,但它也是最能拉开分的地方。咱把最常问的捋一捋。
索引到底是个啥?可以把它想象成字典的目录,没有目录你得一页一页翻,有了目录直接定位,速度起飞。常用的是 B+Tree 索引,所有的数据都存在叶子节点,而且叶子节点用指针串起来了,范围查找特别快。
面试必问题:哪些情况索引会失效? 这是送分题,也是大坑。我用大白话给你总结几个你最可能碰到的:
- 在索引列上做运算或者用函数,比如
WHERE YEAR(create_time) = 2026,索引直接歇菜。 - 用
!=、<>、NOT IN 这些否定操作,很多时候索引也不走。 LIKE 以百分号开头,像 '%老王' 这种,前模糊匹配,索引没法用,因为不知道开头是啥。- 联合索引没遵循最左前缀原则,比如建了
(a,b,c) 的索引,你条件里没有 a,那索引大概率不干活。
那怎么知道索引用没用到呢?用 EXPLAIN 呀,面试时候说会用 EXPLAIN 分析查询计划,看 type、key、rows 这些字段,然后调优,比光背答案强多了。比如你写的 SQL:
CREATEINDEX idx_name ONuser(name);
建好索引后,查 SELECT * FROM user WHERE name = '老王'; 就会快很多,前提是别在 name 上搞函数。
优化这块,还有一个点就是慢查询日志。面试官问你怎么定位慢 SQL,你就说平时打开 MySQL 慢查询,设置个 1 秒的阈值,跑出来的 SQL 再用 EXPLAIN 看看,该加索引加索引,该改写语句就改写,简单粗暴有效。
五、接口开发、安全防护常见面试题

做后端,接口安全属于必考题,没法逃。我把最常见的几个安全问题和应对招数说说。
XSS 跨站脚本攻击,就是别人往你数据库里存了一段 JavaScript 代码,然后其他用户浏览的时候这段代码执行了,可以偷 cookie、弹广告啥的。防护很简单,输出到页面之前用 htmlspecialchars() 把特殊符号转义一下,让它变成普通字符串,执行不了就没事了。
CSRF 跨站请求伪造,这个更狡猾。你登着银行网站,不小心点了个恶意链接,那个链接可能就偷偷用你的身份发起一次转账。防法也成熟了,用 Token,后端生成一个随机的 token 放在表单里或者请求头,提交的时候验证,攻击者不知道这个 token 就没辙。框架一般自带,咱别把它关了就行。
SQL 注入 ,老生常谈了,千万别信任用户输入。你要用 PHP 的原生 PDO,并且一定要用参数绑定,比如 $stmt->execute([':name' => $name]);,这样传进来的值无论多诡异,都当成普通字符串处理,插不进恶意的 SQL 命令。就算用 ThinkPHP 的 ORM,也尽量别自己拼接条件字符串,用它的链式写法。
接口设计上,现在大部分是 RESTful 风格,用 GET 查、POST 增、PUT 改、DELETE 删,状态码 200、201、400、401、404、500 这些都用对,然后统一返回 JSON 格式,带上 code、message、data,前后端都舒坦。面试时把这个规范一说,一看就是有经验的。
哦对,还有个 JWT,现在无状态认证用得飞起。就把它想象成一张电子身份证,用户登录成功后,服务端签发一个 token,里面存了点用户信息,但签名防篡改。之后每次请求带这个 token,服务端验证签名通过就知道是你,不用每次去查数据库 session,特别适合分布式项目。问到你的时候,可以说“我项目里用 JWT 做 API 鉴权,结合中间件拦截验证,实现起来挺方便的”。
好了,今天一口气唠了这么多,都是实打实面试会问的东西。其实你把上面这些知识点理解了,再用自己的话能讲出来,面试的时候基础这块基本不会怂。别光死记硬背,用你自己的小项目去套这些概念,实打实地讲出来才有底气。
觉得有用的话,记得点个收藏,下次面试前翻出来瞄两眼。后面我还会再整理一些项目场景题和进阶的东西,咱下回接着聊。拜拜啦~