1. Потому что может быть передан некорректный $url
2. Потому что self::$routes может содержать некорректные данные
3. Потому что
Что в вашем понимании "не работает"?
Класс g-recaptcha и data-атрибуты нужно повесить на кнопку. В html нужно подключить js-библиотеку от гугла. В php скрипте нужно провести верификацию полученого токена.
1. Поставить IDE, скопировать туда код, посмотреть на ошибку, которая она покажет
2. Еще раз прочитать про интерфейсы
3. Понять, что нужно реализовывать ВСЕ методы в реализующем классе, объявленные в интерфейсе
Php код может содержаться в этом же html файле. Все зависит от способа, которым был реализован проект. Имхо, чистый html нынче практически не встретишь.