介绍
PHP开发者职位的面试不仅是对语言语法的测试,更是对架构理解、安全意识和现代开发方法的考察。许多候选人因缺乏系统性准备而在基础问题上栽跟头。本文将剖析PHP面试中最常见的高频问题,并附上代码示例和解析。无论你是初学者还是希望巩固知识的有经验开发者,本文都将有所帮助。
数据类型与类型转换
PHP支持哪些数据类型?
PHP支持8种基本数据类型,分为三组:
- 标量类型:
bool、int、float、string。 - 复合类型:
array、object、callable、iterable。 - 特殊类型:
resource、null。
类型检查示例:
$value = "123";if (is_numeric($value)) { $intValue = (int) $value; // 强制转换为整型 var_dump($intValue); // int(123)}== 和 === 有什么区别?
==运算符会在类型转换后比较值,而===则不进行类型转换直接比较(严格比较)。这是最常见的陷阱之一:
var_dump(0 == "0"); // bool(true)var_dump(0 === "0"); // bool(false)PHP面向对象编程:继承、接口与Traits
什么是Traits?它们有什么作用?
Traits是PHP中的代码复用机制,用于解决单继承的限制。Traits无法被实例化,但可以通过use关键字引入类中:
trait Logger { public function log($message) { echo "[日志]: $message"; }}
class User { use Logger;}
$user = new User();$user->log("用户已创建");抽象类和接口有什么区别?
- 抽象类可以包含方法实现和属性,通过
extends关键字继承。 - 接口仅定义方法签名(无实现),类可通过
implements关键字实现多个接口。
interface CanFly { public function fly();}
abstract class Bird { abstract public function sound(); public function eat() { echo "吃谷物"; }}
class Eagle extends Bird implements CanFly { public function sound() { echo "尖叫"; } public function fly() { echo "飞翔"; }}数据库操作与PDO
什么是PDO?为什么使用它?
PDO(PHP数据对象)是一个数据库操作扩展,为不同数据库管理系统(MySQL、PostgreSQL、SQLite等)提供统一接口。其最大优势是通过预处理语句防止SQL注入攻击:
$pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass');$stmt = $pdo->prepare('SELECT * FROM users WHERE email = :email');$stmt->execute([':email' => 'user@example.com']);$user = $stmt->fetch(PDO::FETCH_ASSOC);PDO中如何处理错误?
最佳实践是将PDO设置为异常模式:
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);try { $pdo->exec("INSERT INTO users (name) VALUES ('John')");} catch (PDOException $e) { echo "错误:" . $e->getMessage();}安全防护与常见漏洞
如何防止XSS和SQL注入攻击?
面试中需展示对理论及实践措施的深入理解:
- SQL注入:使用PDO预处理语句(参见上文示例)。