Ответ
Да, это частая часть реальных проектов. Мой подход к legacy-коду — не переписывать всё с нуля, а постепенно улучшать, делая его более поддерживаемым и безопасным.
Моя стратегия:
- Сначала анализ: Изучаю код, ищу самые критические точки (например, SQL-инъекции, устаревшие расширения вроде
mysql_*). - Изоляция и покрытие: Пытаюсь изолировать самый проблемный модуль и написать для него хотя бы минимальные интеграционные тесты перед изменениями.
- Пошаговый рефакторинг: Делаю небольшие, безопасные изменения. Например, заменяю прямой вызов
mysql_queryна подготовленные запросы с PDO в одном конкретном методе.
// Было (legacy)
$result = mysql_query("SELECT * FROM users WHERE id=" . $_GET['id']);
// Стало (после рефакторинга)
$pdo = new PDO($dsn, $user, $pass);
$stmt = $pdo->prepare("SELECT * FROM users WHERE id = :id");
$stmt->execute([':id' => (int)$_GET['id']]);
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
Такой подход минимизирует риски и постепенно приводит код к современным стандартам.