|
Klassen in PHP - eine Bibliothek für Funktionen
Jetzt wissen wir was Funktionen sind. Wenn Ihr jetzt unzählige einzelne
Funktionen schreibt und diese alle im Quellcode habt, wird es irgendwann auch
unübersichtlich. Aus diesem Grund nimmt man alle Funktionen und vereint
diese alle zusammen in einer Klasse - einer Bibliothek für Funktionen.
Sinnigerweise unterteilt man am besten die Klassen dann noch nach dem was
Sie machen. Zum Beispiel eine Klasse um E-Mails zu bearbeiten, zu versenden -
eine Klasse um Grafiken zu erstellen, zu kopieren, zu verkleinern - eine
weitere Klasse wieder für andere Funktionen die vom Thema zusammengehören.
Diese Klassen packt man in extra Dateien. So hat man sich Standardfunktionen
geschaffen die man immer wieder verwenden kann, ob in diesem Programm welches
Ihr gerade schreibt oder im nächsten Programm.
Es können Variablen innerhalb einer Klasse definiert werden, auf die
auch sämtliche Funktionen zugreifen können. Funktionen (Methoden)
innerhalb einer Klasse können sich auch gegenseitig aufrufen.
Beispiel:
<?php class meineklasse { var $testvariable = "12345";
function meineklasse() { # dieses "function" heisst wie die Klasse - sobald die # Klasse mit NEW erstellt wird, wird diese function # als erstes aufgerufen - ohne dass wir sie manuell # starten }
function schreibehallo() { echo "Hallo<br>"; }
function schreibetext($text) { echo $text . "<br>"; }
function schreibetestvariable() { echo $this->testvariable . "<br>"; } }
$h = NEW meineklasse(); $h->schreibehallo(); $h->schreibetext("du da ..."); $h->schreibetestvariable();
$h->testvariable = "67890"; $h->schreibetestvariable(); ?>
|
Ausgabe: | Hallo du da ... 12345 67890 |
Mit class meineklasse haben wir die Klasse geöffnet und Ihr den
namen meineklasse gegeben. Innerhalb der geschwungenen Klammern von class haben
wir unsere ganzen Funktionen getan. Die internen Funktionen eines Objekts (der
Klasse) sind Methoden. Die Klasse ist jetzt fertig, aber wir müssen
die Klasse in PHP erstellen , instanzieren bevor wir sie verwenden können.
Jetzt möchten wir die Klasse meineklasse benutzen und teilen dies
php mit $h = NEW meineklasse(); mit. In $h befindet sich nun die
Klasse, das Objekt. Auf sämtliche Funktionen (Methoden) innerhalb dieser
Klasse greifen wir mit -> zu, so z.B. $h->schreibehallo();.
Der Konstruktur
Wie Ihr seht existiert eine Funktion, die genauso heisst wie wir die Klasse
genannt haben. Dies nennt man Konstruktor. Dies wird aufgerufen , sobald wir
php sagen, dass wir die Klasse in $h instanziert haben möchten.
Dieser Konstruktor muss nicht unbedingt vorhanden sein. Man könnte hier Startwerte
erstellen oder ähnliches.
Nach der Instanzierung von meineklasse in $h, rufe ich die erste
function in der Klasse auf ; $h->schreibehallo(); ; danach werden noch
zwei weitere Funktionen aufgerufen, um Text auszugeben.
$this-> in php - Aufrufe innerhalb der Klasse
$h->schreibetestvariable(); gibt die Variable aus, die wir innerhalb! der
Klasse definiert haben. Theoretisch gesprochen müsste die Klasse die
Variable auch mit $h->testvariable ansprechen, da die Klasse selbst aber nicht
wissen kann ob der Programmierer die Klasse in $h instanziert hat (oder
in einer anderen x-beliebigen die ich ja nennen kann wie ich möchte) gibt
es den Standard, dass man innerhalb einer Klasse auf sämtliche Funktionen
und Variablen mit $this-> zugreift. Ich könnte auch zweimal NEW
schreiben und die Klasse einmal in $h und in $c instanzieren.
Jede Klasse in $h und in $c wäre für sich - die eine hat mit der
anderen nichts zu tun, sie sind nur aus der gleichen Klasse entstanden.
Rufe ich die Funktion schreibehallo(); auf, dann tue ich dies von aussen jetzt
mit $h->schreibehallo(); . Würde ich schreibehallo(); IN DER KLASSE zum
Beispiel in der Funktion schreibetext aufrufen wollen, dann müsste ich
sie mit $this->schreibehallo(); aufrufen.
Verwirrt ? Beispiel:
<?phpphp class meineklasse { function schreibehallo() { echo "Hallo<br>"; }
function schreibeduda() { echo "du da...<br>"; }
function schreibetext() { $this->schreibehallo(); # Funktion aufrufen/starten $this->schreibeduda(); # Funktion aufrufen/starten }
}
$h = NEW meineklasse(); $h->schreibetext(); ?>
|
Man kann Klassen auch vererben und eine Klasse von einer anderen Klasse aus
aufrufen, allerdings gehört dieses nicht in einen Anfängerkurs. Dadurch
könnte ich unterschiedliche Klassen nutzen und diese miteinander "verschmelzen".
|