🧱 Суть

Ошибки в PHP – это нормальная часть разработки. Важно не только исправлять проблему, но и быстро находить её причину.

Основные категории ошибок:

  • синтаксические – ошибка в написании кода
  • фатальные – выполнение программы невозможно продолжить
  • предупреждения (warning) – проблема, но выполнение продолжается
  • уведомления (notice) – потенциальная проблема
  • исключения (exception) – ошибки, которые можно обработать через try/catch

Правильная диагностика состоит из:

  1. получения информации об ошибке
  2. поиска места возникновения
  3. анализа данных
  4. исправления причины

📦 Проблема

Без нормальной диагностики ошибки выглядят непонятно.

Например:

$user->name;

Вызывает:

Fatal error: Call to a member function on null

Но причина может быть далеко раньше:

$user = findUser($id);

вернул:

null

Проблема находится не там, где программа упала, а там, где появились неправильные данные.

✅ Решение

Использовать комплексный подход:

  • включить отображение ошибок в разработке
  • читать сообщения PHP
  • использовать var_dump() / print_r()
  • применять Xdebug
  • писать понятные исключения
  • проверять логи приложения

💻 Код

Включение ошибок PHP

Во время разработки ошибки должны быть включены.

Пример:

error_reporting(E_ALL);
ini_set('display_errors', 1);

Это позволяет увидеть:

  • место ошибки
  • тип ошибки
  • файл и строку

Не показывать ошибки на продакшене

На сервере нельзя показывать внутренние ошибки пользователю.

Плохо:

Fatal error:
PDOException in /var/www/config/database.php

Пользователь может увидеть:

  • структуру проекта
  • пути файлов
  • детали базы данных

На продакшене:

display_errors = Off

Ошибки должны записываться в логи.

Основные типы ошибок

Parse Error

Ошибка синтаксиса.

Например:

if ($user) {
    echo $user;

Не хватает закрывающей скобки.

Ошибка:

Parse error: unexpected end of file

Решение:

Проверить:

  • скобки
  • кавычки
  • точки с запятой

Fatal Error

Критическая ошибка, выполнение останавливается.

Например:

unknownFunction();

Результат:

Fatal error: Call to undefined function

Причины:

  • функция не существует
  • класс не подключён
  • неправильное имя метода

Warning

Предупреждение.

Например:

include 'file.php';

Если файла нет:

Warning: include(file.php): failed to open stream

Код может продолжить работу.

Notice / Deprecated

Информация о потенциальной проблеме.

Например:

echo $name;

Если переменная не создана:

Notice: Undefined variable $name

TypeError

Ошибка неправильного типа данных.

Например:

function sum(int $a)
{
}
 
sum('hello');

PHP сообщит:

TypeError

Современный PHP активно использует строгую типизацию, поэтому такие ошибки встречаются часто.

Exception

Ошибка, которую можно обработать.

Пример:

try {
    $user = findUser();
}
catch (Exception $e) {
    echo $e->getMessage();
}

Используется для:

  • ошибок API
  • базы данных
  • бизнес-логики

Частые ошибки разработчиков

Undefined variable

Ошибка:

echo $username;

если переменная не существует.

Проверка:

if (isset($username)) {
    echo $username;
}

Или:

$username ?? 'Guest';

Undefined array key

Ошибка:

echo $user['email'];

если ключ отсутствует.

Проверка:

echo $user['email'] ?? '';

Call to undefined method

Ошибка:

$user->getName();

если метода нет.

Проверить:

  • имя метода
  • подключение класса
  • версию библиотеки

Class not found

Ошибка:

new UserService();

Причины:

  • отсутствует use
  • неправильный namespace
  • не выполнен autoload

Проверить:

composer dump-autoload

Ошибки подключения файлов

Например:

require 'config.php';

Файл не найден.

Разница:

include
  • предупреждение
  • выполнение может продолжиться
require
  • критическая ошибка
  • выполнение остановится

Ошибки базы данных

Например:

SQLSTATE[42S02]

Причины:

  • неправильное имя таблицы
  • ошибка SQL
  • нет подключения
  • неверные параметры

Для диагностики:

try {
    $pdo->query($sql);
}
catch(PDOException $e) {
    echo $e->getMessage();
}

Методы диагностики

var_dump()

Проверить значение:

var_dump($user);

Показывает:

  • тип
  • структуру
  • содержимое

Логи

Вместо вывода пользователю:

error_log($message);

Информация сохраняется на сервере.

Xdebug

Позволяет:

  • поставить breakpoint
  • остановить выполнение
  • посмотреть переменные
  • пройти код пошагово

Особенно полезен для сложной логики.

Stack trace

Стек вызовов показывает путь выполнения.

Например:

index.php

Controller

Service

Repository

Ошибка

Помогает найти источник проблемы.

Алгоритм поиска ошибки

1. Прочитать сообщение

Не игнорировать текст ошибки.

PHP часто прямо говорит:

Undefined variable $user

2. Найти файл и строку

Например:

UserService.php:42

Проверить:

строка 42

3. Проверить входные данные

Добавить временно:

var_dump($data);

или посмотреть через Xdebug.

4. Проверить цепочку вызовов

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

Например:

Controller

Service

Repository

5. Исправить причину, а не симптом

Плохо:

if ($user === null) {
    return;
}

если пользователь никогда не должен быть null.

Лучше найти почему findUser() не вернул данные.

Частые ошибки при диагностике

Игнорировать текст ошибки

Плохо:
Сразу переписывать код без анализа.

Часто сообщение уже содержит причину.

Использовать echo везде

Плохо:

echo $variable;

по всему проекту.

Лучше использовать:

  • логи
  • Xdebug
  • отладчик IDE

Ловить все ошибки пустым catch

Плохо:

try {
 
}
catch(Exception $e) {
 
}

Ошибка просто исчезнет.

Лучше:

catch(Exception $e) {
    error_log($e->getMessage());
}

Исправлять только место падения

Ошибка может находиться выше по цепочке.
Всегда ищи источник неправильного состояния.

🎯 Вывод

  • Ошибки PHP бывают разных типов и требуют разных подходов
  • Первое правило диагностики – внимательно читать сообщение ошибки
  • var_dump(), логи и Xdebug помогают понять состояние программы
  • Ошибки нужно исправлять по причине, а не маскировать симптомы
  • На разработке ошибки должны быть включены, на продакшене – скрыты и записываться в логи
  • Хорошая типизация и обработка исключений уменьшают количество проблем

🔗 Связано