Почему бы вместо абстрактного класса не делать обычный, но с пустыми методами?
================================================================================

 сабж :)   

  

Никогда не использовал эту фичу - абстрактный класс - потому что не понимаю: зачем она вообще нужна?  

  

Я ведь могу просто не определять тело метода в базовом **обычном** классе, да и всё.  

  

Или я что-то упустил в рассуждениях? 

 Абстрактный класс нужен для того, чтобы не было возможности создавать его экземпляры, а только его классов-наследников.  

Простой пример. Пусть у нас будет абстрактный класс Фигура с методом Нарисовать; и есть его классы-наследники Круг и Квадрат.  

Так вот. Экземпляры классов Круг и Квадрат мы имеем право создавать, а вот экземпляр Фигуры создавать не имеем права, т.к. это не имеет физического смысла. И уж тем более мы никак не можем реализовать метод Нарисовать у Фигуры. Поэтому и сделан такой запрет на абстрактные классы.  

Это необходимо, чтобы код был надёжным и защищённым от кривых рук других программистов 

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

  

В вашем же случае, пустой метод будет делать *ничего* и в программе появится ошибка, которую можно было бы предотвратить синтаксически. 

 Если есть несколько братьев, то у них должен быть родитель.  

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

  

> Я ведь могу просто не определять тело метода в базовом обычном классе, да и всё.

  

Действительно, так делают: одна часть методов определена у родителя, но не все.  

А вот если ни один метод не определять, то встаёт вопрос - нужен ли такой экземпляр без методов? Вот абстракция и решение: нельзя сделать экземпляр. 

 Не в курсе как-там в PHP это работает, но в принципе, абстрактные классы вынуждают наследников переопределять абстрактные методы. Использовать не переопределенные абстрактные методы невозможно - будет ошибка.  

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