Зарегистрируйтесь для доступа к 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-разработчик
Профессия
с нуля
Разработка веб-приложений на Laravel
8 декабря 10 месяцев

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

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

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

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