Robert Basic has a post to his site covering interfaces and their use in PHP, including what to consider when creating effective interfaces.
Creating and implementing interfaces in our code is important. It helps with swapping out components, eases testing, separates the what from the how.
But, it’s not enough just to slap an interface on a class and be done with it. We also need to consider on what are we putting that interface on.
He starts with an example of a feed (RSS) reader where an interface defines a queue handler with an
add method. Eventually he makes some decisions and implements the queue in a concrete class but points out that there’s something "fishy" about the example. He covers the three issues he sees including the class doing two things and how it locks the functionality into the queue. He refactors the example, abstracting things out to more correctly adhere to the Single Responsibility Principle and split out the database handling from the queue functionality.