← Назад к вопросам

Что является неверным при написании проекта?

2.0 Middle🔥 171 комментариев
#Архитектура и паттерны

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI7 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Ошибки при проектировании и написании проекта на PHP

Ошибки, совершаемые при разработке PHP проектов, можно разделить на стратегические (архитектурные, организационные) и тактические (код-специфичные, повседневные). Я выделю ключевые проблемы, которые чаще всего приводят к неудачным проектам.

1. Стратегические ошибки: Архитектура и планирование

Отсутствие четкой архитектуры — фундаментальная проблема. Проект начинается как набор скриптов без разделения ответственности, что быстро приводит к «спагетти-коду».

  • Пример плохого подхода: Все логика — в одном файле index.php, смешиваются SQL-запросы, HTML вывод и бизнес-правила.
  • Как должно быть: Использование MVC, DDD или хотя бы простого разделения на слои (Controller, Service, Repository).
// Плохо: всё вместе
if ($_POST) {
    $sql = "INSERT INTO users ...";
    mysqli_query($conn, $sql);
    echo "User added!";
}

// Хорошо: разделение ответственности
class UserController {
    public function store(UserRequest $request, UserService $service) {
        $user = $service->createUser($request->validated());
        return new JsonResponse($user);
    }
}

Игнорирование безопасности на ранних этапах. Мыслить «добавим потом» — губительно. Основные риски:

  • SQL-инъекции — использование чистого mysqli или PDO без подготовленных выражений.
  • XSS — вывод пользовательских данных без экранирования (htmlspecialchars) или шаблонизаторов, которые делают это автоматически.
  • Невалидируемые входные данные — trust $_GET, $_POST, $_COOKIE.
// Критическая ошибка - SQL-инъекция
$id = $_GET['id']; // id = "1; DROP TABLE users"
$query = "SELECT * FROM users WHERE id = $id";

// Правильный подход - подготовленные выражения PDO
$stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?");
$stmt->execute([$id]);

Выбор технологий без анализа требований. Использование «самого популярного» фреймворка для небольшого API или, наоборот, написание огромного проекта на чистом PHP.

2. Тактические ошибки: Качество кода и практики

Не использование современного PHP. Остановка на версии 5.x или 7.x, когда доступны 8.x с огромными улучшениями ( атрибуты, свойства-промоутеры, номинальные типы, JIT).

// Устаревший стиль классов (PHP < 8.0)
class User {
    private $name;
    public function __construct(string $name) {
        $this->name = $name;
    }
}

// Современный стиль с промоутерами свойств (PHP >= 8.0)
class User {
    public function __construct(private string $name) {}
}

Отсутствие типизации — приводит к непредсказуемому поведению и сложности в отладке.

// Плохо: без типов
function calculateDiscount($price, $discount) {
    return $price - $discount; // Что если $discount = "10%"?
}

// Хорошо: строгая типизация
function calculateDiscount(float $price, float $discount): float {
    return $price - $discount;
}

Плохая организация файлов и автолоадинга. Использование require/include вместо Composer и PSR-4.

Игнорирование зависимостей и их управление. Ручное скачивание библиотек, копирование классов из интернета вместо использования composer.json.

3. Организационные и процессные ошибки

Нет системы контроля версий (Git) или её неправильное использование (коммиты всего проекта раз в месяц).

Отсутствие тестирования. Код не покрывается юнит-тестами, функциональными тестами. Любое изменение становится рисковым.

// Пример простого теста с PHPUnit
class UserServiceTest extends TestCase {
    public function testCreateUser(): void {
        $service = new UserService();
        $user = $service->createUser(['name' => 'John']);
        $this->assertEquals('John', $user->getName());
    }
}

Нет документации или её неактуальность. Особенно для API проектов — отсутствие OpenAPI/Swagger описания.

«Своя» реализация вместо стандартных решений. Попытка написать собственный ORM, роутер, аутентификацию, когда есть проверенные библиотеки ( Doctrine, Symfony Components, Laravel Passport).

4. Ошибки масштабирования и производительности

Неправильная работа с базами данных. Выбор неподходящего типа (MySQL для тяжелой аналитики), отсутствие индексов, N+1 проблемы в ORM.

// Типичная N+1 проблема в ORM-подобном коде
$users = $db->getAllUsers(); // 1 запрос
foreach ($users as $user) {
    $orders = $db->getOrdersForUser($user->id); // N запросов
}

Не учитывание нагрузки на память. Обработка огромных массивы данных в памяти вместо потоковой обработки или пагинации.

Плохая конфигурация сервера. Использование mod_php в Apache для высоконагруженных проектов вместо PHP-FPM, отсутствие настроек opcache.

Ключевые выводы для предотвращения ошибок

  • Планируйте архитектуру до написания кода.
  • Следуйте современным стандартам PHP и PSR.
  • Инвестируйте в безопасность с первого дня.
  • Автоматизируйте: используйте Composer, Git, CI/CD, автоматическое тестирование.
  • Не изобретайте велосипеды для стандартных задач.
  • Пишите код, который легко читать и поддерживать, а не только «работающий».

Правильный подход к проекту — это сочетание технической грамотности, использования современных инструментов и следование проверенным практикам разработки.

Что является неверным при написании проекта? | PrepBro