Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Ошибки Основы PHP

Если программа на PHP написана синтаксически некорректно, то интерпретатор выводит на экран соответствующее сообщение, а также указание на файл и строчку в нем, где по его мнению произошла ошибка.

В этом уроке мы научимся работать с ошибками.

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

А вот в программировании все строго. Любое мельчайшее нарушение — и программа даже не запустится. Примером может быть забытая ;, неправильно расставленные скобки и другие детали.

Вот пример кода с синтаксической ошибкой:

<?php

print_r('Hodor')
// PHP Parse error:  syntax error, unexpected end of file in /private/var/tmp/index.php on line 4

Подобные синтаксические ошибки в PHP относятся к разряду Parse error. Как видно, в конце приводится путь до файла и номер строки.

С одной стороны, ошибки Parse error — самые простые, потому что они связаны исключительно с грамматическими правилами написания кода, а не с самим смыслом кода. Их легко исправить: нужно лишь найти нарушение в записи.

С другой стороны, интерпретатор не всегда может четко указать на это нарушение. Поэтому бывает, что забытую скобку нужно поставить не туда, куда указывает сообщение об ошибке.

Уведомления и предупреждения

В силу исторических причин PHP имеет непривычную систему ошибок.

В других аналогичных языках ошибки делятся на два типа:

  • Ошибки парсинга
  • Исключения

В PHP к ним еще добавляются:

  • Notice
  • Warning
  • Fatal Error

Если программа написана синтаксически некорректно, то мы не сможем запустить ее. Тут все просто: такие ошибки невозможно обработать, и мы их видим сразу.

Все остальные ошибки в других языках реализованы с помощью механизма исключений, который мы рассмотрим позже.

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

В PHP многие ошибки являются исключениями (что хорошо), но далеко не все (что плохо). Например, попытка использовать несуществующую переменную в PHP не приводит к возникновению исключения — то есть ошибки. Программа продолжает работать, но в выводе работы программы можно заметить следующие строки:

<?php

$i += 3;
// PHP Notice:  Undefined variable: i in php shell code on line 1

PHP Notice — это даже не ошибка, а просто предупреждение, что код написан не очень хорошо, но останавливать его выполнение никто не будет.

В любом другом языке попытка использовать несуществующую переменную приводит к ошибке, и программисту придется ее исправить, но только не в PHP.

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

То же самое касается и PHP Warning. Это тоже предупреждения, но более серьезные. Ну, и наконец, Fatal Error — это уже настоящие ошибки. В отличие от исключений, они не могут быть обработаны и просто завершают выполнение программы.

Что еще интереснее: PHP позволяет подавить вывод этих предупреждений и сделать вид, что все хорошо:

<?php

error_reporting(0);

Еще один механизм подавления — оператор @, который можно поставить перед любым вызовом функции. Он выключает Notice и Warning, происходящие внутри этой функции:

<?php

function foo()
{
    $i += 1;
}

foo(); // Notice: Undefined variable: i

@foo(); // Ничего не выводится, как будто все хорошо

Как вы понимаете, такой подход в разработке не сулит ничего хорошего. Любые Notice или Warning нужно рассматривать как серьезные ошибки, требующие исправления.

На Хекслете эта проблема решена так: все оповещения типа Notice и Warning автоматически превращаются в исключения, а значит рассматриваются как настоящие ошибки. Такого поведения можно добиться, используя xdebug.


Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Об обучении на Хекслете

Открыть доступ

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

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы
профессия
Занимайтесь созданием сайтов, веб-приложений, сервисов и их интеграцией с внутренними бизнес-системами на бекенд-языке PHP
10 месяцев
с нуля
Старт 7 ноября

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»