Die Modifiers in PHP – Teil 1
Damals – als wir noch mit PHP4 unterwegs waren – gab es keine Modifier. Alle Attribute und Methoden einer Klasse waren grundsätzlich public und man behalf sich mit Konstruktionen wie “Methoden, die mit Unterstrich anfangen, sind private”. Dies muss aber nicht sein und mit PHP 5 gibt es mehrer Modifier, die das Entwicklerherz höher schlagen lassen. Diese sind public, private, protected und abstract, final. Hier gibt es nun eine kleine Beitragsreihe, die die Modifier vorstellt und an Beispielen erklärt. Beginnen wir mit dem aus PHP4 übernommenen, dem public-Modifier.
Der public-Modifier kann explizit angegeben werden oder man kann ihn auch weglassen. Ich persönlich gebe den Modifier explizit an. Einerseits unterstützen morderne IDEs die Entwicklung mit den Modifiern, andererseits kann ein zweiter Programmierer direkt sehen, dass ich eine Methode aus Absicht public deklariert habe und nicht einfach nur vergessen habe den Scope zu setzen.
Public-deklarierte Methoden kann man nun immer aufrufen und in abgeleiteten Klassen natürlich auch nutzen. Daneben darf man die Methode überschreiben. Bei Attributen wirkt public so, dass man direkt auf die Attribute von außen zugreifen kann. Dies ist normalerweise nicht gewünscht. Man nutzt hier üblicherweise Setter und Getter, damit man die Möglichkeit hat, Daten vor dem Speichern im Attribut zu validieren (z.B.). Bei einem direkten Zugriff funktioniert dies nicht. Der Trick mit dem magic __get
und __set
kann dies zwar auch bewerkstelligen, wird aber schnell unschön, wenn verschiedene Attribute verschieden Validatoren benötigen.
Als Beispiel packe ich wieder mal ein paar Autos aus:
1 2 3 4 5 6 7 8 9 10 11 |
class car { public $engine public function start() { $engine->start(); } } $myCar = new Car(); $myCar->engine = null; $myCar->start(); |
Wir haben nun ein Auto mit einem Motor. Da der Motor public ist, kann er auch durch Luft (oder einfach nichts) ersetzt werden. Startet man das Auto, fällt die Anwedung auf die Nase und man hat schon den beschriebenen Fall. Hätten wir einen private Modifier, könnte man den Motor durch den Zugriff von außen schützen und das sehen wir im Beitrag Teil 2.