Sichtbarkeit in der OOP
Ich hoffe mal, dass jeder hier Sichtbarkeiten kennt. In der OOP werden sie auf Attribute und Methoden angewendet. Als Beispiel kann man eine Funktion public deklarieren und somit kann jeder von außen auf diese zugreifen, bei private kann nur die Klasse selbst und bei protected können auch abgeleitete Klassen damit hantieren. In der Vorstellung vieler oder der meisten Programmierer ist es aber anders, für sie ist es eine Sichtbarkeit auf Objekt Ebene. Das heißt ich habe ein Objekte und kann darin auch auf die Methoden zugreifen, die ich über die Klassenhierarchie geerbt habe. Ein kleines Beispiel wäre:
class A { protected function doSth( ) { } } class B extends A { public function doSthElse( ) { parent::doSth( ); } } $b = new B; $b->doSth( ); // Fehler $b->doSthElse( ); // Funktioniert
Soweit so gut, hier sind wir ja noch alle auf einem Nenner. Das aber folgendes Konstrukt auch funktioniert, wissen die wenigstens. Zumindest eine repräsentative Umfrage in unserem Team ergab diese Vermutung (2 von 2 nicht gewusst).
Class B extends A { public function doSthElse( ) { $a = new A; $a->doSth( ); } }
Obwohl ich hier von außen auf die Methode doSth( ) zugreifen will und diese protected ist, habe ich das Recht sie zu verwenden. Dies liegt natürlich an dem anderen Kontext, in dem wir hier handeln. Aber hier kann man einfach sehen, dass nur die Klassen relevant für die Sichtbarkeiten sind und nicht die Objekte mit denen ich gerade jongliere. Diese Sichtweise auf Klassen wird übrigens in den meisten OO Programmiersprachen geteilt.