Из PHP-кода в жизнь: как проходит день разработчика

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Утро начинается не с кофе, а с паники?

Знаете, что общего между утренним кофе PHP-разработчика и его кодом? И то, и другое должно быть горячим, крепким и без осадка. Но если серьезно, то типичный рабочий день PHP разработчика — это не бесконечное чаепитие и написание магических скриптов. Это ежедневное решение десятков задач: от чтения чужого legacy-кода до написания чистых, тестируемых функций. В этой статье мы заглянем за кулисы реального рабочего дня бэкенд-разработчика на PHP, разберем типичные проблемы, покажем примеры кода и дадим советы, которые помогут вам стать эффективнее.

08:30 — Вход в зону боевых действий

День начинается с проверки мессенджеров и почты. Но не спешите читать все подряд. Опытный PHP разработчик сначала открывает панель мониторинга (New Relic, Sentry или Grafana). Если за ночь упала база данных или выросло время ответа API — вы узнаете об этом первым. Утро превращается в тушение пожара.

Что делать, если прод «лежит»?

Первым делом — проверить ошибки в логах. Типичная команда для быстрого анализа:

tail -f /var/log/nginx/error.log | grep "PHP Fatal error"

Часто проблема решается рестартом PHP-FPM или проверкой прав на кэш. Если вы видите такое в логах:

[error] 1234#1234: *1 FastCGI sent in stderr: "PHP message: PHP Fatal error:  Uncaught Error: Class "App\Service\PaymentGateway" not found

...значит вчерашний деплой сломал автозагрузку Composer. Решение: composer dump-autoload и проконтролировать, что все файлы на месте.

09:00 — Daily stand-up и планирование

В 9 утра — ежедневный митинг. Здесь PHP программист рассказывает, что сделал вчера, что планирует сегодня и есть ли блокеры. Не тяните кота за хвост: если вы застряли на задаче больше 2 часов — просите помощь. Это нормально.

После митинга — приоритизация. Откройте Jira/Trello/YouTrack и выберите 1-2 задачи на день. Лучше сделать одну хорошо, чем пять «на коленке».

10:00 — Погружение в код: работа над фичей

Самое время для глубокой работы. Вы берете задачу из бэклога. Допустим, нужно добавить новый эндпоинт API для вывода списка заказов с пагинацией. Начинаем не с контроллера, а с модели и репозитория.

Пример: пишем чистый код на PHP

Плохой подход — валить всё в один метод:

// Плохо
public function getOrders($userId, $page) {
    $query = "SELECT * FROM orders WHERE user_id = ? LIMIT ? OFFSET ?";
    // ... 50 строк с SQL, логикой и выводом
}

Хороший подход — разделение ответственности:

// Сервисный слой
class OrderService {
    public function __construct(
        private OrderRepository $repository,
        private OrderSerializer $serializer
    ) {}
    
    public function getUserOrders(int $userId, int $page, int $perPage): array {
        $orders = $this->repository->findByUser($userId, $page, $perPage);
        return array_map(fn($order) => $this->serializer->serialize($order), $orders);
    }
}

// Репозиторий
class OrderRepository {
    public function findByUser(int $userId, int $page, int $perPage): array {
        $offset = ($page - 1) * $perPage;
        return Order::where('user_id', $userId)
                    ->offset($offset)
                    ->limit($perPage)
                    ->get()
                    ->toArray();
    }
}

Такой код легко тестировать, поддерживать и расширять. Это и есть профессионализм PHP разработчика.

12:00 — Обед и переключение контекста

Обед — святое. Не ешьте за клавиатурой. Выйдите на улицу, почитайте книгу или посмотрите видео по архитектуре. Мозгу нужен отдых. После обеда — время для менее сложных задач: code review, документация, ответы на вопросы джунов.

13:30 — Code review: как не поругаться с коллегой

Code review — это не война. Это обучение. Когда вы проверяете код другого PHP разработчика, ищите:

  • Безопасность (SQL-инъекции, XSS, утечка данных)
  • Читаемость (нейминг, структура)
  • Производительность (лишние запросы в БД, N+1 проблема)

Пример комментария «как не надо»: «Ты что, это полный ужас, перепиши». Пример хорошего комментария: «Здесь лучше использовать коллекцию Laravel для фильтрации, чтобы не делать 100 запросов в цикле. Давай попробуем так: ...»

15:00 — Работа с багами и поддержка legacy

Ни один день PHP-разработчика не обходится без работы с багами. Вы открываете задачу с высоким приоритетом: «На проде упала оплата при сумме > 10000». Начинаете с воспроизведения. Смотрите Sentry:

// Пример ошибки из Sentry
Error: Division by zero in /var/www/app/Services/DiscountCalculator.php:45

Идете в код и видите:

public function calculateDiscount($price): float {
    return $price / $this->minOrderAmount; // $minOrderAmount может быть 0
}

Фикс:

public function calculateDiscount(float $price): float {
    if ($this->minOrderAmount <= 0) {
        return 0.0; // или выбросить исключение
    }
    return $price / $this->minOrderAmount;
}

Не забудьте написать тест для этого кейса!

16:30 — Работа с документацией и митапы

После обеда мозг уже не так свеж. Хорошее время для написания документации на Swagger/OpenAPI или чтения PHP RFC. Загляните на PHP RFC — возможно, выйдет новый синтаксис, который упростит вашу работу. Например, property hooks в PHP 8.4 — это революция для моделей.

Если в компании есть внутренний митап (tech talk) — обязательно участвуйте. Это лучший способ прокачаться как PHP программист.

17:30 — Подготовка к деплою

Деплой — это стресс. Чтобы он прошел гладко, соблюдайте чек-лист:

  • Обновить composer.lock и проверить зависимости
  • Прогнать PHPUnit тесты: vendor/bin/phpunit --coverage-html ./reports
  • Запустить PHPStan или Psalm для статического анализа: vendor/bin/phpstan analyse src/ --level=8
  • Создать миграции БД: php artisan migrate --pretend

Пример хорошей практики — использование CI/CD (GitHub Actions, GitLab CI). При пуше в ветку main автоматически запускаются тесты

Блоги

Рекомендаций по книгам