Many cases can be implemented in both class types.
Interfaces are usefull when you want to define a class that has to have at least basic functions. Like a real interface for example USB.
interface USB {
public function sendPower(); //charge iphone for example
public function sendData(); //itunes
public function recieveData();
}
Use abstract classes when there are several ways to to implement an object.
abstract class MobilePhone {
public function isIphone();
public function charge() {
//get some power, all phones need that
}
}
class iPhone extends MobilePhone {
public function isIphone() { return true; }
}