I'm working my way through a Design Patterns manual, and I got stuck at the definition of "interface." I read half a dozen descriptions of interfaces on the web and PHP books I have at home. I grasp what interfaces are, and how they differ from abstract classes, but for the life of me, I cannot figure out why you would use interfaces.
No, when you read about "interfaces", do not only think of interface constructs. An interface is some non-private (and some say "published") set of declarations, typically functions, that a user of the interface can rely on.
So, a concrete class defines an interface consisting of its public members. A user of that class can use those public members and be certain that even if the implementation changes, those members will still be there. The class defines an interface for its derived classes consisting of its public members and protected members. The derived classes can use those protected members and be certain that even if the implementation changes, those members will still be there.
Now, an interface construct is used to specify a pure interface: effectively a class that has no implementation. An abstract base class typically has some implementation, but some parts of the class is left to derived classes to implement.
Note that a library of functions, with no classes involved, also specifies an interface: one that consists of those functions that are declared to be the interface of that library.
But why bother? The prototypes aren't required; you can create and run the methods in the classes without the prototypes.
The idea is to program to an interface, not an implementation.