Beispielanwendung von Klasse/Objekt in PHP
Nach der vielen Theorie nun zur Veranschaulichung ein Beispiel:
<?php
// die Klasse "Auto" definieren
class auto
{
// eine Eigenschaft/Attribut festlegen
var $benoetigter_kraftstoff;
// eine Methode festlegen (nennt sich Funktion,
// ist aber in einer Klasse und
// wird somit als Methode bezeichnet)
function tankdeckel_oeffnen()
{
// Ihr Auto spricht mit Ihnen - wenn der
// Tankdeckel geöffnet wird, sagt es, welchen
// Kraftstoff es benötigt
echo "<p>Bitte mit ";
echo $this->benoetigter_kraftstoff;
echo " betanken";
}
}
// bisher passiert noch gar nichts,
// jetzt wird aus der Klasse ein Objekt erzeugt
$auto_1 = new auto;
// dem Auto wird nun der Kraftstoff zugewiesen,
// eine Eigenschaft (Attribut) wird definiert
$auto_1->benoetigter_kraftstoff = "Diesel";
// und nun wird das erste mal die Methode (Funktion)
// tankdeckel_oeffnen aufgerufen und das Auto sagt
// freudig, was es für Sprit benötigt
$auto_1->tankdeckel_oeffnen();
?>
Das mag für die wenige Funktion erscheinen, als schieße man auf Spatzen mit Kanonen (soll vorkommen). Interessant ist es, wenn wir nun für die ganze Familie die Autos erzeugen.
// das neues Objekt auto_2 wird "gekauft"
$auto_2 = new auto;
$auto_2->benoetigter_kraftstoff = "Super";
// das neues Objekt auto_3 wird erstellt
$auto_3 = new auto;
$auto_3->benoetigter_kraftstoff = "Ethanol";
// Wird nun mit Auto 3 tanken gegangen,
// erhält man den richtigen Hinweis,
// was das Auto schluckt mit:
$auto_3->tankdeckel_oeffnen();
Aufgabe
Ergänzen Sie das Beispiel oben, dass das Auto nicht nur sagt, was es für Treibstoff benötigt, sondern auch, was für eine Marke es ist (z. B. ein Benz, ein BMW, eine ABC-Klasse oder so).
Gedächtnis des Objektes
Jedes Objekt hat sein eigenes Gedächtnis (die Daten sind gekapselt) - im obigen Beispiel merkt sich das Auto nun, wie oft es in seinem Leben betankt wurde. Dazu benötigen wir eine weitere Eigenschaft (anzahl_betankungen) und die Methode tankdeckel_oeffnen wird erweitert (OK, nicht jedes Mal, wenn der Tankdeckel geöffnet wird, wird auch getankt - aber so ist es nett einfach)
<?php
// die Klasse "Auto" definieren
class auto
{
// eine Eigenschaft/Attribut festlegen
var $benoetigter_kraftstoff;
// Eigenschaft anzahl_betankung setzen und
// Start-Wert zuweisen
var $anzahl_betankungen = 0;
// eine Methode (flapsig Funktion) festlegen
function tankdeckel_oeffnen()
{
// Ihr Auto spricht mit Ihnen - wenn der
// Tankdeckel geöffnet wird, sagt es, welchen
// Kraftstoff es benötigt
echo "<p>Bitte mit ";
echo $this->benoetigter_kraftstoff;
echo " betanken";
echo "<p>Ich wurde ";
echo $this->anzahl_betankungen;
echo " mal betankt";
// Anzahl der betankungen wird um 1 erweitert
$this->anzahl_betankungen++;
}
}
// bisher passiert noch gar nichts,
// jetzt wird aus der Klasse ein Objekt erzeugt
$auto_1 = new auto;
// dem Auto wird nun der Kraftstoff zugewiesen,
// eine Eigenschaft (Attribut) wird definiert
$auto_1->benoetigter_kraftstoff = "Diesel";
// und nun wird das erste mal die Methode (Funktion)
// tankdeckel_oeffnen aufgerufen und das Auto sagt
// freudig, was es für Sprit benötigt
$auto_1->tankdeckel_oeffnen();
// Damit man das Gedächtnis des Objektes sieht
$auto_1->tankdeckel_oeffnen();
?>
Anwendung von Objektorientierter Programmierung oder Prozeduraler Programmierung
Bei einigen Programmen wird es nicht sinnvoll sein, diese objektorientiert zu erstellen, da wirklich mit Kanonen auf Spatzen geschossen wird, bei anderen Programmen wird es sehr wohl sinnvoll sein. Dies ist immer die Entscheidung des Programmierers. Wenn Sie sich verschiedene Programme von anderen Programmierern ansehen, werden Sie sich manchmal fragen, warum nicht objektorinentiert. Das kann verschiedene Gründe haben, wie z.B. dass das Ursprungsprogramm ganz ganz klein war und erst mit der Zeit in Größe und Komplexität gewachsen ist oder schlicht und ergreifend der entsprechende Programmierer nicht firm ist in Objektorientierter Programmierung. Der erste Schritt zum Verständnis ist wichtig und kann unter Umständen mehrere Anläufe benötigen – aber es lohnt sich!
Ausgabe der Eigenschaften eines Objektes:
Sie können auch die Eigenschaften direkt abfragen (das sollte aber in der Regel über die Methoden stattfinden:
echo $auto_1->benoetigter_kraftstoff;
echo $auto_1->anzahl_betankungen;
Aufgabe:
Erstellen Sie die Klasse "student"
Diese Klasse hat die Eigenschaft:
- Geschlecht
- Alter in Jahren
- Hauptfach
Und es gibt die Methoden
- hat Geburtstag (Alter steigt i.d.R. um 1 Jahr) und eine Ausgabe auf dem Bildschirm erscheint mit dem entsprechenden Alter
- wechselt Hauptfach und eine Ausgabe auf dem Bildschirm erscheint, welches das alte Fach war und welches das neue Fach ist.
Leiten Sie 2 Objekte ab:
- Objekt: Susi S., Alter 22, Hauptfach Englisch
- Objekt: Alfred A., Alter 24, Hauptfach Ameisenkunde
Lassen Sie Alfred 2-mal Geburtstag haben und Susi das Fach wechseln nach Latein
Wenn Sie einen Fehler finden, bitte mitteilen (egal ob Schreibfehler oder inhaltlicher Fehler).
Mit Maus fehlerhafte Stelle markieren und übernehmen mit folgendem Button: