1. PHP面试题概述
PHP作为全球使用最广泛的服务器端脚本语言之一,在Web开发领域占据着重要地位。无论是初创公司还是大型互联网企业,PHP开发岗位的面试都会涉及从基础语法到高级特性的全方位考察。根据我多年参与技术面试的经验,PHP面试题通常可以分为语言基础、Web开发、数据库操作、框架使用、性能优化和安全防护等六大核心模块。
2. PHP基础语法面试题
2.1 变量与数据类型
PHP作为弱类型语言,其变量处理机制常被考察。一个经典问题是:"PHP中==和===的区别是什么?"正确答案是:==只比较值,===同时比较值和类型。例如:
0 == false // true 0 === false // false另一个常见问题是关于变量作用域的:
function test() { $a = 1; global $a; echo $a; } $a = 2; test(); // 输出什么?这里考察global关键字的用法,正确答案是输出2。
2.2 数组操作
数组是PHP中最常用的数据结构之一。面试常问的问题包括:
如何实现数组去重?
$unique = array_unique($array);多维数组排序:
usort($users, function($a, $b) { return $a['age'] <=> $b['age']; });数组合并的几种方式及区别:
$c = $a + $b; // 保留$a中的键 $c = array_merge($a, $b); // 重新索引数字键
3. Web开发相关面试题
3.1 会话管理
关于Session和Cookie的常见问题:
Session和Cookie的区别:
- Session存储在服务器端,Cookie存储在客户端
- Session更安全但占用服务器资源
- Cookie有大小限制(约4KB)
如何实现跨页面Session共享?
// 使用session_id() session_id('自定义ID'); session_start();
3.2 HTTP协议
常见的HTTP状态码问题:
- 200:成功
- 301/302:重定向
- 403:禁止访问
- 404:未找到
- 500:服务器内部错误
4. 数据库操作面试题
4.1 MySQL基础
防止SQL注入的方法:
// PDO预处理 $stmt = $pdo->prepare('SELECT * FROM users WHERE id = ?'); $stmt->execute([$id]);索引优化问题:
- 什么情况下索引会失效?
- 如何查看SQL执行计划?
4.2 事务处理
事务的ACID特性:
- 原子性(Atomicity)
- 一致性(Consistency)
- 隔离性(Isolation)
- 持久性(Durability)
示例代码:
try { $pdo->beginTransaction(); // 执行SQL $pdo->commit(); } catch (Exception $e) { $pdo->rollBack(); }5. 框架相关面试题
5.1 Laravel框架
服务容器概念:
- 什么是IoC容器?
- 如何实现依赖注入?
Eloquent ORM:
// 定义模型关联 class User extends Model { public function posts() { return $this->hasMany(Post::class); } }
5.2 ThinkPHP框架
路由配置方式:
// 路由定义 Route::get('blog/:id', 'blog/read');模型操作:
// 查询构造器 Db::name('user')->where('status',1)->select();
6. 性能优化与安全
6.1 性能优化
OPcache配置:
; php.ini配置 opcache.enable=1 opcache.memory_consumption=128数据库优化:
- 慢查询日志分析
- 索引优化
- 读写分离
6.2 安全防护
XSS防护:
htmlspecialchars($input, ENT_QUOTES, 'UTF-8');CSRF防护:
// Laravel中的CSRF Token <input type="hidden" name="_token" value="{{ csrf_token() }}">
7. 高级特性与最新版本
7.1 PHP 8.x新特性
联合类型:
function foo(int|string $param) { // ... }命名参数:
array_fill(start_index: 0, num: 100, value: 50);构造器属性提升:
class Point { public function __construct( public float $x = 0.0, public float $y = 0.0 ) {} }
8. 实战编程题
8.1 算法题
- 实现冒泡排序:
function bubbleSort($arr) { $n = count($arr); for ($i = 0; $i < $n; $i++) { for ($j = 0; $j < $n - $i - 1; $j++) { if ($arr[$j] > $arr[$j+1]) { $temp = $arr[$j]; $arr[$j] = $arr[$j+1]; $arr[$j+1] = $temp; } } } return $arr; }
8.2 设计模式
- 单例模式实现:
class Singleton { private static $instance; private function __construct() {} public static function getInstance() { if (!isset(self::$instance)) { self::$instance = new self(); } return self::$instance; } }
9. 面试技巧与准备建议
项目经验准备:
- 准备2-3个有代表性的项目
- 能清晰说明技术难点和解决方案
编码规范:
- PSR标准
- 代码注释规范
常见陷阱题:
$a = 1; $b = &$a; $b = 2; echo $a; // 输出什么?
在实际面试中,除了技术问题的回答,面试官更看重候选人的问题分析能力和解决方案的合理性。建议在准备时不仅要记住答案,更要理解背后的原理。