以下是整理的 PHP 常见面试题与答案,涵盖基础语法、面向对象、数据库、安全等核心知识点,帮助系统化备考。
PHP 基础语法
Q1: 解释 echo、print、print_r 的区别
echo 是语言结构,可输出多个字符串(无返回值),速度最快。
print 是函数,只能输出一个字符串(返回 1),速度次之。
print_r 用于打印变量的人类可读信息(如数组),调试时常用。
Q2: == 和 === 的区别
== 比较值是否相等(忽略类型),如 "5" == 5 为 true。
=== 严格比较值和类型,"5" === 5 为 false。
Q3: 超全局变量列举
$_GET、$_POST、$_REQUEST、$_SESSION、$_COOKIE、$_SERVER、$_ENV、$_FILES。
面向对象编程
Q4: 抽象类与接口的区别
抽象类可包含具体方法,接口只能定义方法签名。
类只能继承一个抽象类,但可实现多个接口。
抽象类用于代码复用,接口强调行为契约。
Q5: Trait 的作用
解决 PHP 单继承限制,通过 use 关键字混入代码片段。例如复用日志功能:
trait LogTrait {
public function log($msg) {
echo $msg;
}
}
class User {
use LogTrait;
}
Q6: 魔术方法示例
__construct():构造函数
__destruct():析构函数
__get()/__set():属性访问拦截
数据库与 MySQL
Q7: 防止 SQL 注入的方法
使用预处理语句(PDO 或 MySQLi):
$stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?");
$stmt->execute([$id]);
避免直接拼接 SQL 字符串。
Q8: MySQL 索引优化原则
为频繁查询的字段(如 WHERE、JOIN 条件)创建索引。
避免过度索引,影响写入性能。
使用 EXPLAIN 分析查询执行计划。
安全与性能
Q9: XSS 攻击防御
输出时转义:htmlspecialchars($str, ENT_QUOTES)。
设置 Cookie 的 HttpOnly 属性。
使用 CSP(内容安全策略)头。
Q10: 优化 PHP 脚本性能
使用 OpCache 缓存字节码。
减少数据库查询(如用 JOIN 替代循环查询)。
避免在循环中执行耗时操作(如文件读写)。
进阶概念
Q11: 设计模式举例
单例模式:确保类只有一个实例(如数据库连接)。
工厂模式:通过工厂类创建对象,解耦调用方与具体类。
Q12: Composer 的作用
管理 PHP 依赖包,自动加载类文件。常用命令:
composer require package-name # 安装依赖
composer dump-autoload -o # 优化自动加载
实战场景
Q13: 处理大文件上传
修改 php.ini 的 upload_max_filesize 和 post_max_size。
分片上传(前端切分文件,后端合并)。
Q14: 实现 JWT 认证
use Firebase\JWT\JWT;
$token = JWT::encode(['user_id' => 123], 'secret_key', 'HS256');
以上为部分高频问题,完整版建议结合具体技术栈(如 Laravel、Symfony)深入准备。
浙公网安备 33010602011771号