Здесь очень емко описана суть вопроса:
PHP:
// обьяви interface
interface ModuleUser{
function init();
function getRecords();
}
// тут сторонние разработчики вольны делать что хотят
class First implements ModuleUser{
// bla bla
}
// пользуй
function x(ModuleUser $mu){}
x(new First);
x(new Second);
))))