Не работает потому что:
1. Нельзя переопределять константы объявленные в интерфейсе
2. Нельзя переопределять сигнатуру методов объявленных в интерфейсе, т.е. если Вы в интерфейсе объявили метод setVariable($var) то и в классах реализовывающих интерфейс должен быть точно такой же метод с точно такими же параметрами
3. Класс должен реализовывать все МЕТОДЫ объявленные в интерфейсе, у Вас же метод getHtml($template) в классе BadTemplate не определен
Вы бы почитали что такое
интерфейсы и как с ними работать