Interfejsy służą do tego, aby wymusić na danej hierarchi klas zdefiniowanie określonych metod. Po to się to stosuje, aby ustalić "protokół", sposób "porozumiewania się", czy też korzystania z tych klas. Załóżmy, że nad projektem pracuje kilku programistów, jeśli zdefiniuje się interfejsy to nie ważne co będzie w klasie implementującej jakiś tam interfejs, bo wiadome że w interfejsie są określone wymagane metody publiczne, z których to korzystamy z danej klasy. Programista wtedy wie, że trzeba dane metody, które służą do korzystania z obiektów danej klasy, zaimplementować, przez co jest zunifikowany dostęp do klas należącej do tej samej gałęzi hierarchi

Przeanalizuj przykład Cysiaczka. Można dopisać takie coś:
<?php
class Women extends Human
{
public function sayGoodMorningTo($person)
{
print "Good Morning ".$person."!"; }
}
class CommunityMambers
{
protected $member;
public function addMember(Courtesy $member)
{
}
public function sayGoodMorning($person){
foreach($this->member as m){
print $m->sayGoodMorningTo($person); }
}
}
?>
Dzięki temu zapewniamy to, że klasa "Man" i "Woman" mają metody "sayGoodMorningTo", więc w metodzie CommunityMambers::sayGoodMorning() nie wyskoczy błąd, że dany obiekt nie posiada metody "sayGoodMorningTo".