Ошибки, сложный материал, вопросы >
Нашли опечатку или неточность?

Выделите текст, нажмите ctrl + enter и отправьте его нам. В течение нескольких дней мы исправим ошибку или улучшим формулировку.

Что-то не получается или материал кажется сложным?

Загляните в раздел «Обсуждение»:

  • задайте вопрос нашим менторам. Вы быстрее справитесь с трудностями и прокачаете навык постановки правильных вопросов, что пригодится и в учёбе, и в работе программистом;
  • расскажите о своих впечатлениях. Если курс слишком сложный, подробный отзыв поможет нам сделать его лучше;
  • изучите вопросы других учеников и ответы на них. Это база знаний, которой можно и нужно пользоваться.
Об обучении на Хекслете

Ошибки

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.


<span class="translation_missing" title="translation missing: ru.web.courses.lessons.mentors.mentor_avatars">Mentor Avatars</span>

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

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

Зарегистрироваться

или войти в аккаунт

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

  • 115 курсов, 2000+ часов теории
  • 800 практических заданий в браузере
  • 250 000 студентов

Нажимая кнопку «Зарегистрироваться», вы даёте своё согласие на обработку персональных данных в соответствии с «Политикой конфиденциальности» и соглашаетесь с «Условиями оказания услуг».

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

Логотип компании Альфа Банк
Логотип компании Rambler
Логотип компании Bookmate
Логотип компании Botmother

Есть вопрос или хотите участвовать в обсуждении?

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

Нажимая кнопку «Зарегистрироваться», вы даёте своё согласие на обработку персональных данных в соответствии с «Политикой конфиденциальности» и соглашаетесь с «Условиями оказания услуг».