When you wish to require developers working on your system, including yourself, to implement a specific amount of methods on the classes they will be creating, use an interface.
When you want to compel developers working on your system, including yourself, to implement a predetermined number of methods and you want to offer some base methods to assist them in creating their child classes, use an abstract class.
Another thing to bear in mind is that client classes can implement numerous interfaces but can only extend one abstract class. Therefore, each child class can only adhere to one behaviour contract if you define your behaviour contracts as abstract classes. This can be advantageous in situations when you wish to steer your user-programmers in a specific direction. Sometimes it would be detrimental. The Countable and Iterator interfaces in PHP might theoretically be abstract classes rather than interfaces.
I hope this helps you.