Введение
Собеседование на позицию PHP-разработчика — это не только проверка синтаксиса языка, но и тест на понимание архитектуры, безопасности и современных подходов. Многие кандидаты теряются на базовых вопросах, потому что не готовятся системно. В этой статье мы разберем топ вопросов, которые чаще всего задают на собеседованиях по PHP, с примерами кода и пояснениями. Материал будет полезен как начинающим, так и опытным разработчикам, желающим освежить знания.
Типы данных и приведение типов
Какие типы данных существуют в PHP?
PHP поддерживает 8 основных типов данных, разделенных на три группы:
- Скалярные:
bool,int,float,string. - Составные:
array,object,callable,iterable. - Специальные:
resource,null.
Пример проверки типа:
$value = "123";
if (is_numeric($value)) {
$intValue = (int) $value; // приведение к int
var_dump($intValue); // int(123)
}
Чем отличается == от ===?
Оператор == сравнивает значения после приведения типов, а === — без приведения (строгое сравнение). Это одна из самых частых ловушек:
var_dump(0 == "0"); // bool(true)
var_dump(0 === "0"); // bool(false)
ООП в PHP: наследование, интерфейсы и трейты
Что такое трейты и зачем они нужны?
Трейты (traits) — это механизм повторного использования кода в PHP, который решает проблему одиночного наследования. Трейт нельзя инстанцировать, но его можно подключить в класс с помощью use:
trait Logger {
public function log($message) {
echo "[LOG]: $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 Data Objects) — это расширение для работы с базами данных, которое обеспечивает единый интерфейс для разных СУБД (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 с подготовленными запросами (см. пример выше). Никогда не конкатенируйте пользовательский ввод в SQL.
- XSS: экранируйте вывод с помощью
htmlspecialchars():
$safeName = htmlspecialchars($_POST['name'], ENT_QUOTES, 'UTF-8');
echo "Привет, $safeName";
Что такое сериализация и какие риски она несет?
Сериализация преобразует объект в строку для хранения. Но unserialize() может выполнить произвольный код, если переданы поддельные данные. Никогда не десериализуйте данные от пользователя:
// Опасно!
$data = unserialize($_GET['data']);
// Безопасная альтернатива — использовать json_encode/json_decode
$safeData = json_decode($_GET['data'], true);
Заключение
Мы разобрали ключевые темы, которые помогут вам уверенно пройти собеседование по PHP: от типов данных и ООП до работы с PDO и безопасности. Помните, что теоретические знания нужно подкреплять практикой — пишите код, разбирайте чужие проекты и не бойтесь задавать вопросы на интервью. Удачи!
Подписывайтесь на блог PythonLib, чтобы получать больше материалов по PHP, Python и веб-разработке.