🧱 Суть
Ошибки в PHP – это нормальная часть разработки. Важно не только исправлять проблему, но и быстро находить её причину.
Основные категории ошибок:
- синтаксические – ошибка в написании кода
- фатальные – выполнение программы невозможно продолжить
- предупреждения (warning) – проблема, но выполнение продолжается
- уведомления (notice) – потенциальная проблема
- исключения (exception) – ошибки, которые можно обработать через
try/catch
Правильная диагностика состоит из:
- получения информации об ошибке
- поиска места возникновения
- анализа данных
- исправления причины
📦 Проблема
Без нормальной диагностики ошибки выглядят непонятно.
Например:
$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 $nameTypeError
Ошибка неправильного типа данных.
Например:
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 $user2. Найти файл и строку
Например:
UserService.php:42Проверить:
строка 423. Проверить входные данные
Добавить временно:
var_dump($data);или посмотреть через Xdebug.
4. Проверить цепочку вызовов
Ошибка могла появиться раньше.
Например:
Controller
↓
Service
↓
Repository5. Исправить причину, а не симптом
Плохо:
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 помогают понять состояние программы- Ошибки нужно исправлять по причине, а не маскировать симптомы
- На разработке ошибки должны быть включены, на продакшене – скрыты и записываться в логи
- Хорошая типизация и обработка исключений уменьшают количество проблем
🔗 Связано
- PHP. Отладка (var_dump, print_r, Xdebug)
- catch) и обработка ошибок
- PHP. Типы данных и приведение типов
- PHP. Функции и анонимные функции (Closure)
- PHP. Подключение файлов (include, require, autoload)
- PHP. Пространства имён (Namespace) и PSR-4
- PHP. SQL через PDO
- PHP. Основы безопасности (XSS, CSRF, SQL Injection)