Objektorientierte Programmierung
Die Objektorientierte Programmierung (OOP) in PHP ist ein mächtiges Werkzeug um euren Programmcode leichter wartbarer zu machen und einfacher wiederverwendbar zu machen. Die erste Nutzung von Objekten habt ihr wahrscheinlich bereits in unserem MySQL Tutorial gehabt, also ihr PHP Data Objects (PDO) verwendet habt.
Das objektorientierte Programmieren ist anfänglich nicht so einfach und viele Bücher führen recht kompliziert in das Thema ein. Wir hoffen euch hier eine einfach verständliche Einführung geben zu können. Umfassende Infos zu OOP in PHP findet ihr im PHP Manual.
Ein Hinweis vorweg: Objektorientierte Programmierung lohnt sich oft erst ab einer gewissen Komplexität eurer Anwendung. Die Grundlagen zu kennen ist dennoch für jeden empfehlenswert.
Inhaltsverzeichnis
Einführung
Bei der objektorientierten Programmierung existieren zwei Begriffe, die wichtig sind: Klassen und Objekte. Eine Klasse ist ein abstraktes Konzept für das ihr später Eigenschaften und Methoden definieren könnt. Vergleicht ihr dies mit der realen Welt, so wäre das Konzept eines Stuhls eine Klasse. Stühle haben alle gewisse Ähnlichkeiten, zumeist vier Beine und man kann auf diesen Sitzen. Der konkrete Stuhl in eurer Küche würde dann einem Objekt der Klasse Stuhl entsprechen.
Um dies nun auf PHP zu münzen stellt euch eure registrierten User in eurer Datenbanktabelle vor. Jeder Benutzer eures Systems hat gewisse Eigenschaften, beispielsweise seinen Namen, seine E-Mail-Adresse, sein Passwort usw. Ein konkreter User, z.B. Max Mustermann mit der E-Mail-Adresse [email protected], wäre ein konkretes Objekt eurer Klasse.
Warum Objektorientierte Programmierung?
Der Grund dafür ist ziemlich einfach, auch wenn er sich am Anfang nicht ganz so erschließt. Durch das Abbilden eurer Anwendung in Klassen schafft ihr Struktur und könnt Funktionalitäten kapseln. So werdet ihr nicht in einem heillosen Code-Chaos enden. Bei professionellen Anwendungen wird meistens komplett objektorientiert programmiert.
Stellt euch vor ihr möchtet einen Webshop programmieren. Welche Klassen mit welchen Eigenschaften und Methoden existieren dort? Es werden wahrscheinlich zumindest die folgenden Klassen existieren:
User – Zur Repräsentation eurer Benutzer. Ein Benutzer hat dabei ein Benutzernamen, ein Passwort, eine E-Mail-Adresse usw.
Product – Zur Repräsentation eurer im Shop vorhandenen Produkte. Jedes Produkt hat dabei einen Preis, eine Beschreibung, ggf. ein Produktbild.
Productorder- Ebenfalls werdet ihr Bestellungen benötigen, bei denen ein Benutzer ein oder mehrere Produkte bestellt.
Mittels OOP könnt ihr Funktionen die nur den Benutzer betreffen, z.B. das Ändern seines Passworts, in der Klasse für den Benutzer programmieren. Dieser Code ist dann schön getrennt von allen anderen Code, der Code wird leichter lesbar und wenn Änderungen anfallen sind diese deutlich leichter umsetzbar.
Grundlagen
Nun genug von der Einführung, nachfolgend ein kleines Beispiel um die wichtigsten Konzepte und Begriffe zu veranschaulichen:
<?php //Definition der Klasse User class User { //Definition der Eigenschaften name, email und password public $name; public $email; public $password; //Definition der Methode setEmail function setEmail($newEmail) { if(filter_var($newEmail, FILTER_VALIDATE_EMAIL) !== false) { $this->email = $newEmail; return true; } return false; //Neue E-Mail-Adresse konnte nicht gespeichert werden, da diese ungültig war } } //Definition von zwei Objekten, Max und Lisa $max = new User(); $max->name = "Max Mustermann"; $max->setEmail("[email protected]"); $lisa = new User(); $lisa->name = "Lisa Meier"; $lisa->setEmail("[email protected]"); echo "Max hat die E-Mail $max->email und Lisa die E-Mail $lisa->email"; ?>
Im obigen Beispiel definieren wir zuerst eine Klasse
1 2 3 4 5 |
<?php class EuerKlassenName { // ... } ?> |
Alles was ihr zwischen die geschweiften Klammern setzt gehört zur Klasse.
Danach haben wir einige Eigenschaften definiert für die User-Klasse, dies geht mittels dem Befehl public, gefolgt vom Namen. Eigenschaften, oder auch Attribute oder Felder genannt, sind dabei nichts anderes als Variablen:
1 2 3 4 5 6 7 |
<?php class EuerKlassenName { public $eigenschaft1; public $eigenschaft2; //... } ?> |
Diese Eigenschaften verhalten sich identisch zu Variablen, sprich, dies sind Variablen die sich innerhalb eurer Klasse befinden. In ihnen könnt ihr Werte hinterlegen, beispielsweise für den Namen oder die E-Mail-Adresse.
Nach den Eigenschaften für den Benutzer folgt eine Methode
1 2 3 4 5 6 7 |
<?php class EuerKlassenName { function EuerMethodenName($parmater1, $parameter2, $parameter3) { // Euer Code der Methode } } ?> |
Im obigen Code überprüft die Methode setEmail, ob der übergebene Wert $newEmail eine gültige E-Mail-Adresse. Falls die neue E-Mail-Adresse gültig ist, wird intern in der Klasse der Wert der Eigenschaft $email überschrieben. Dies geht mittels $this->email = $neueEmail;.
Um nun Objekte euer User-Klasse zu erzeugen, d.h. um vom abstrakten Konzept nun echte User mit echten Daten zu erzeugen, verwendet ihr den Schlüsselbegriff new. Dieses erzeugte Objekt könnt ihr dann wiederum in Variablen hinterlegen. Im obigen Script werden zwei konkrete User erzeugt, sprich, es werden zwei Objekte erzeugt und in den Variablen $max und $lisa abgespeichert.
Bei diesen Objekten könnt ihr nun auf die Eigenschaften zugreifen, indem ihr z.B. $max->name = "Max Mustermann"; schreibt. Ebenfalls könnt ihr Methoden aufrufen, indem ihr $max->setEmail("[email protected]"); ausführt.
Das Interessante dabei ist hier, dass die Eigenschaften und Methoden für $max und $lisa sich nicht in die Quere kommen. Wenn ihr die E-Mail-Adresse oder den Namen für $max ändert, dann hat dies keinerlei Auswirkung auf das User-Objekt $lisa.
Autor: Nils Reimers