Was sind (PHP) Klassen?
Nun… wenn man von Klassen spricht muss man eigentlich auch gleich noch von Objekten und Attributen sprechen da diese 3 zusammen gehören wie Tom & Jerry.
Wikipedia erklärt das ganz gut mit folgenden Worten:
Man kann sich die Erzeugung von Objekten aus einer Klasse vorstellen wie das Fertigen von Autos aus dem Konstruktionsplan eines bestimmten Fahrzeugtyps. Klassen sind die Konstruktionspläne für Objekte.
und mit meinen Worten:
Klassen sind da um zusammenhängende Methoden(Funktionen) zu vereinen und den Zugriff auf Daten und Methoden zu steuern.
Also:
- Klassen beschreiben den Typ und beinhalten die Methoden
- Objekte sind die Erzeugnisse der Klassen
- Attribute sind die Eigenschaften des Objekts
- Methoden sind die internen „Funktionen“ eines Objekts und werden in der Klasse definiert
Leute welche prozedural programmieren und nicht objektorientiert werden evtl nicht ganz verstehen was Attribute etc. sind deshalb hier der Old School Vergleich:
- Funktionen = Methoden
- Variablen = Attribute bzw. Eigenschaften
So.. als Beispiel nehme ich nun die Erklärung von Wikipedia und trenne diese auf in die Klasse, Attribute und Methoden.
Klasse:
Auto
Eigenschaften / Attribute:
- Marke
- PS
- Farbe
Methoden:
- starten
- bremsen
- beschleunigen
Einfach oder? Ich denke jetzt solltest du wissen was Attribute und Methoden etc. sind.
Beispiel:
In PHP werden Klassen mit dem Schlüsselwort class definiert.
1 2 3 | class auto { ..... } |
Aus dieser Klasse wird nun das Objekt erstellt.
1 2 3 4 | class auto { ..... } $auto = new auto("BMW", 218, "pink"); |
Und mit den Methoden kann man nun auf deren Funktionen zugreifen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | class auto { public $marke; public $ps; private $farbe; public function auto($marke, $ps, $farbe){ $this->marke = $marke; $this->ps = $ps; $this->farbe = $farbe; } public function werBistDu() { return "Ich bin ein ".$this->marke." mit der Farbe ".$this->farbe." und ".$this->ps." Pferden unter der Haube"; } private function farbe() { return $this->farbe; } public function ps() { return $this->ps; } public function psUndFarbe() { return $this->ps." - ".$this->farbe; } } $auto = new auto("BMW", 218, "pink"); echo $auto->werBistDu(); echo $auto->ps(); echo $auto->psUndFarbe(); |
Das Schlüsselwort this
Wie man oben sehen kann wird immer $this->.. verwendet.
Doch was ist $this eigentlich?
$this ist ein Schlüsselwort und steht innerhalb des Objekts für das aktuelle Objekt. PHP erkennt so ob die Variablen nur im Objekt gültig sind oder auch ausserhalb des Objekts. $this->.. greift also auf eine Variable zu welche im ganzen Objekt gültig ist.
Private und öffentliche Variablen
Nach der Definition der Klasse in meinem Beispiel wird festgelegt welche Variablen privat und welche public sind. Der Unterschied ist eigentlich klar… auf public Variablen kann man von aussen zugreifen während private Variablen nur innerhalb der Klasse verfügbar sind.
Aber nun zurück zum Beispiel… die einzige private Variable ist die Farbe. Das hat zur Folge dass die Methode $auto->farbe einen Error verursachen würde weil man nicht von ausserhalb darauf zugreifen kann jedoch ist die Farbe innerhalb verfügbar wie man das bei der Methode psUndFarbe erkennen kann. Ruft man nun diese Methode auf wird „218 – pink“ ausgegeben.
That’s it….
Ok nicht ganz… programmiert man objektorientiert sollte man folgende Begriffe auch kennen (welche ich aber jetzt nicht erklären werde):
Wer mehr zum ganzen Thema erfahren möchte kann sich hier neues Wissen aneignen.
Ich muss sagen das es nicht ganz einfach ist sich in die objektorientierte programmierung reinzudenken wenn man bis anhin prozedural programmiert hat. Jedoch kann ich jedem nur empfehlen sich die Grundkenntnisse der objektorientierten Programmierung anzueignen da zB. viele OpenSource Projekte objektorientiert geschrieben sind um sie schneller zu erweitern, übersichtlich zu halten und natürlich um Daten vor unerlaubten Zugriffen zu schützen. Möchte man also mal etwas eigenes in so ein Projekt einprogrammieren ist es von Vorteil wenn man dies so macht wie die Ersteller gemacht haben und nicht prozeduralen Code in ein objektoerientiertes Projekt “klatscht”.
Ich hoffe das dir diese Erklärung etwas gebracht hat..
2 Kommentare
hi.. also die ps Methode brauchst du nur wenn du nur die Anzahl PS haben willst..
Ohne diese Methode kommst du ja nicht an die PS ran.
Das ist das witzige an Klassen.. du kannst so sicherstellen das deine Sachen gschützt sind und zB. nur innerhalb der Klasse sichtbar und verfügbar sind.
Herzlichen Dank für den guten Beitrag. Ich seh schon, das mit dem objektorientierten Programmieren macht wirklich auch Sinn, um den Code lesbarer und erweiterbarer zu machen (also eben für öffentliche Scripts).
In dem Beispiel oben hast du in der Klasse eine Methode ‘ps’ für die Marke jedoch nicht. Bäuchte es diese ps-Methode überhaupt, da das Attribut ja public ist? Oder verstehe ich da was falsch?