Можно использовать обычный метод (в данном случае статический):
public static function foo() {
throw new RuntimeException("Надо реализовать!");
}
-- и с помощью броска исключения в родителе заставлять реализовывать этот метод в потомках.
Этот подход является своебразной заменой абстрактному родительскому методу