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

Error: Call to undefined function App\Users\undef()

/usr/src/app/src/Users.php:9
/usr/src/app/tests/UsersTest.php:27

Отладка всегда сводится к двум вещам:

  1. перевести сообщение об ошибке
  2. найти в бектрейсе то место в своем коде, после которого произошла ошибка.

Вывод ошибок делится на две части: непосредственно сообщение с ошибкой и бектрейс.

Бектрейс (иногда говорят "стектрейс") - это список всех вызовов функций от запуска программы вплоть до того места, где произошла ошибка. Бектрейс - очень важный инструмент, который позволяет увидеть то, как выполнялась ваша программа, и какие функции вызывались.

Бектрейс

С бектрейсом всё просто - он собой указание на файл и строчку, в которой была вызвана соответствующая функция. Бектрейс называется back, потому, что вывод строк идет в обратном порядке. Наверху находится последний вызов, внизу - первый. В рамках одного бектрейса возможны (и часто встречаются) ситуации, когда часть функций вызывается где-то в библиотеках, которые вы не писали, но используете, а часть - в вашем коде.

Ошибки

Наиболее простые и понятные ошибки — синтаксические. Они связаны исключительно с тем, что код записан неверно, например забыта точка с запятой в конце инструкции. В выводе таких ошибок всегда присутствуют фразы parse error и syntax error. Для их исправления нужно открыть то место в коде, на которое указывает ошибка, и внимательно на него посмотреть.

PHP Parse error:  syntax error, unexpected '}' in /usr/src/app/src/Users.php on line 7

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

Эти ошибки исправить труднее, чем синтаксические. Обычно они возникают в результате неправильной логики в другом, более раннем вызове.

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

Типы ошибок

PHP, в силу исторических причин, имеет необычную, откровенно говоря, странную и все усложняющую систему ошибок. Если в других аналогичных языках, технически, ошибки делятся на два типа — ошибки парсинга и исключения, то в PHP к ним еще добавляются Notice, Warning и Fatal Error.