Here is one of the ways how I learned about interfaces and understood them.
Imagine this scenario:
abstract class Plane {
public function openDoors();
}
interface Fliers {
public function fly();
}
Now lets use them:
class Boeing747 extends Plane implements Fliers {
public function fly() {
// some stuff
}
public function openDoors() {
// do something
}
}
And:
class Tweety implements Fliers{
public function fly() {
// some stuff
}
}
Boeing747 is Plane that can fly and Tweety is a bird than can fly but it makes no sense for Tweety to "openDoors".
The point is that interfaces can be implemented by different kinds of objects but classes can not. As you can see Boeing747 and Tweety have nothing in common other than both can fly.