Ich denke mal die Objektorientierung ist so ganz mit Version 5 gekommen,
ich mache mich damit jetzt innerhalb von PHP vertraut…
Einige kleine Fragen:
Sind die Exemplarvariablen der Klassen in PHP automatisch private ?
Machen getter und setter in PHP Sinn?
Ich frage, weil ich beispiele sehe in denen nur ein Setter existiert und dann per -> Operator auf die var zugegriffen wird - für mich macht das so nicht viel sinn…
Sind die Exemplarvariablen der Klassen in PHP automatisch private ?
Nein, public. Aber PHP 5 verlangt ohnehin, dass Du das zutreffende Attribut voranstellst. Var gilt als deprecated, ist aber halt noch nötig, wenn es zu PHP 4 kompatibel sein soll.
Solche Getter und Setter müssen für sich genommen auch keinen Sinn machen, tun sie allein auch meist nicht direkt. Aber im OO-Gesamtwerk, wenn Du etwa ein Objekt an ein anderes übergibst, wird das sehr nützlich.
..ja deine Sicht zu den Gettern und Settern ist… algemein - ich meine ich würde deiner Aussage schon etwa zustimmen - nur, wann macht ein setter alleine Sinn?
Wenn ich meine examplar var auch innerhalb der Klasse nur per setter verändere aber trotzdem jeder direkt reinschauen kann (ohne get) ? Wie lässt sich das mit dem OOP-Konzept vereinen bzw. warum mache ich mir die Mühe eines Setters?
Also innerhalb der Klasse ist das relativ egal, es sei denn, get und set prüfen und verarbeiten noch irgendwelche Sachen. Da kannst Du aber sonst auch problemlos mit $this->var arbeiten. Hat mir bisher zumindest noch niemand erzählt, dass das bei OO anders sein soll.
die getter & setter bieten jeder für sich mehr Kapselung. Darum ist set auch ohne get schon sinnvoll.
OOP heißt imho nicht das sich alle Objekte komplett gegen Zugriffe von aussen abzuschotten haben indem sie nur Methoden anbieten, das schafft höchstens frust beim debuggen, weil das System nur mit den Situationen zurecht kommt an die der Entwickler gedacht hat.
OOP ist mehr ein Protokoll dem folgen kann, wenn eine passende Methode da ist sollte man diese auch benutzen statt mit dem Protokoll zu brechen und selbst im Objekt herumzustochern, manchmal ist es aber nötig (zb. auch reverse engineering).
Nice to read (aber lang…):
Parabola von Mr. Yegge
Wie sieht es mit Konstruktoren aus?
Sind die in php üblich oder kann ich Objecte aus dem stehgreif zaubern?
Konstruktoren sind notwendig. In PHP5 nennt man die Konstruktoren am besten __construct, so sind spätere Namensänderungen leichter. Mir ist aber auch nicht klar, wie es anders funktionieren sollte. Irgendwie muss ja erst mal ein Objekt der Klasse erschaffen werden.
Es gibt in PHP5 so genannte "magische Funktionen".
Dazu gehören:
__construct()
__destruct()
__clone()
__autoload()
__get()
__set()
Das Erzeugen eines Objektes geht auch auf einer Klasse ohne Konstruktor, da dann ein leerer Konstruktor angenommen wird. Der eigentlich Konstruktor ist in PHP5 lediglich mit __construct() gekennzeichnet und hat als gegenpart __destruct()