public, protected, private, Interfaces, abstrakte Klassen und alles, was PHP noch so alles halbwegs unterstützt, soll die selben Eigenschaften erfüllen, wie auch in anderen Sprachen, die das unterstützen.
Man deklariert Instanzvariablen (objektspezifische Variablen) als "private" und nutzt Getter- und Setter-Methoden (getXXX(), setXXX(value)), um auf deren Werte zuzugreifen oder sie zu verändern. Warum? Weil so z.B. verhindert werden kann, dass eine Instanzvariable "kontostand" einen negativen Wert erhält. Die Getter- und Setter-Methoden dienen quasi als "Zwischenschicht". Das ganze Prinzip nennt sich übrigens Kapselung und ist eins der Grundeigenschaften von OO.
Interfaces? Die benutzt man, um die Wiederverwendbarkeit zu erhöhen! Sie schreiben bestimmte Methoden vor, die implementiert werden müssen und stellen somit sicher, dass jede Klasse, die das Interface implementiert auch die entsprechenden Methoden anbietet. Man könnte z.B. das Interface "Database" schreiben, das die Methoden select(table, where) und delete(table, id) zur Verfügung stellt und sämtliche datenbankspezifische Klassen dieses implementieren lassen. So ist sichergestellt, dass alle Datenbankklassen in der Anwendung gleich sind, was bedeutet, dass du ohne Weiteres auf ein anderes DMBS umstellen kannst.
Das war jetzt alles nur ganz grob erklärt, wer sich intensiver für OOP interessiert, dem empfehle ich ein entsprechendes Buch oder die Sprache Java
@FipsTheThief:
Dass als protected definierte Methoden von Subklassen nicht überschrieben werden können, ist AFAIK falsch! Deren Gültigkeit kann beim Überschreiben sogar auf 'public' ausgedehnt werden.