я бы тоже посоветовал начинать не с конца (зачем в языке высокого уровня абстрактные классы и интерфейсы), а с начала - как программирование развивалось от ассемблера/бейсика с кучей переменных и jmp/goto в структурную парадигму, а потом в ооп и зачем там понадобились абстрактные классы и интерфейсы. более того, я в php не спец и не знаю, как в этом слабо типизированном языке эти самые классы и интерфейсы реализованы :)
прямой ответ на вопрос "зачем" - чтобы реализовать композицию объектов. гуглить dependency injection, inheritance vs composition. вообще, вопрос зачем уже не стоит, сейчас это проверенные временем основы, которые нужно просто знать.
если на пальцах - в строго типизированных языках переменная типа IMyInterface может хранить экземпляры классов, реализующих IMyInterface. переменная типа MyAbstractClass может хранить экземпляры классов, порожденных от MyAbstractClass.
к примеру, от абстрактного класса Logger с методом log(s: string) мы можем породить реальные классы Console Logger, EmailLogger, DBLogger, SMSLogger и т.д., а потом подкидывать в девелоперском окружении консольный, а в боевом емейл и т.д.
надеюсь, я ответил на прямой вопрос и не слишком напряг отсылкой к базовым знаниям :D