Статические методы стоит использовать в качестве именованных конструкторов. Для всего остального лучше создавать экземпляры объектов, потому что статические методы к ООП, по большому счёту, никакого отношения не имеют и поэтому размывают парадигму для тех, кто в ней не очень хорошо ориентируется.
Если в статическом методе нет работы с состоянием и таких методов много, скорее всего, автор кода не очень проникся идеями ООП и код написан в процедурном стиле. А если там есть модификация какого-то состояния, то это работа с глобальными переменными (почему глобальные переменные - это плохо, надеюсь, пояснять не нужно).
Обязательно ли создавать экземпляр? Или можно обойтись статическими методами
У вас в коде есть вот это:
echo Form::getError();
. Откуда статический метод будет получать информацию об ошибке формы? Как он будет отличать ошибки одной формы от другой?
Единственное что знаю, экземпляр надо создавать тогда, когда он оперирует уникальными данными
Экземпляр нужен тогда, когда у него есть какое-то собственное
состояние (ошибки валидации, например). У двух объектов состояние может совпадать (то есть быть неуникальным), но это не значит, что в следующий момент один из них не изменится.