PHP/Definition einer Klasse
Aus Mikiwiki
Inhaltsverzeichnis |
Definition einer Klasse
Zur Definition einer Klasse wird die Anweisung "class" verwendet.
Das folgende Beispiel führt Datumsberechnungen aus. Das geht zwar auch ohne Klassen, sieht aber nicht mehr so elegant aus. Das Skript zeigt sowohl die Klassendefinition als auch die Instanziierung der Objekte. Die Klasse "printdate" kennt zwei Eigenschaften ("$language", "$datetime") und zwei Methoden ("weekday()", "month()"). Sie soll Wochentage und Monatsnamen in verschiedenen Sprachen ausgeben. Innerhalb der geschweiften Klammern werden die Eigenschaften mit "var" definiert. Alternativ kann auch der Sichtbereich des Mitglieds genannt werden, wobei "var" stellvertretend" für "public" steht, also eine uneingeschränkte Sichtbarkeit.
Das Skript gibt nur den Wochentag in Englisch aus... von wegen verschiedene Sprachen.
|
<?php class printdate { ## Eigenschaft $language: Codierung, welche Sprache verwendet wird var $language; ## Eigenschaft $datetime: Datum, zu dem Wochentag oder Monat ausgegeben wird var $datetime; ## Ausgabe des Wochentags function weekday() { $old = setlocale(LC_TIME, $this->language); echo strftime("%A", $this->datetime); setlocale(LC_TIME, $old); } ## Ausgabe des Monatsnamens function month() { $old = setlocale(LC_TIME, $this->language); echo strftime("%B", $this->datetime); setlocale(LC_TIME, $old); } } $dd = new printdate; $de = new printdate; $dd->language = "ge"; $de->language = "fr"; $dd->datetime = $de->datetime = time(); $dd->weekday(); echo "<hr>\n"; $de->weekday(); ?> |
Tuesday Tuesday |
Eigenschaften
Eigenschaften stehen immer als Variablen zur Verfügung. Methoden werden dagegen wie Funktionen erzeugt. Parameter und Rückgabewerte können ebenso wie in normalen Funktionen erzeugt werden. Den mit "var" deklarierten Eigenschaften können nur konstante Werte zugewiesen werden.
Folgendes Beispiel funktioniert nicht. Stattdessen können Konstruktoren verwendet werden.
|
var $eigenschaft = $andere_eigenschaft * 2; |
Aus stilistikgründen ist die Deklaration sogenannter "Eigenschaftsfunktionen" zu empfehlen; PHP erzwingt dies nicht. Dabei wird für jede Eigenschaft eine Methode geschrieben, welche die Zuweisung erledigt und eine, mit welcher der Wert ausgelesen wird. Soll eine Eigenschaft nur "lesbar" sein, so entfällt die Zuweisungsmethode.
|
<?php class calc { ## Eigenschaft var $faktor; ## Methode für Zugriff auf Eigenschaft "$faktor" function set_faktor($value) { $value = (double) $value; if ($value > 0) $this->faktor = $value; else $this->faktor = 1; } ## Methode für Zugriff auf Eigenschaft "$faktor" function get_faktor() { return $this->faktor; } function into($value) { return $value / $this->faktor; } function from($value) { return $value * $this->faktor; } } $f = new calc(); $f->set_faktor(1.95583); $dm = 100; echo "100 DM sind " . $f->into($dm) . " Euro.<br />\n"; echo "Der Umrechnungsbetrag war: " . $f->get_faktor(); ?> |
100 DM sind 51.1291881196 Euro. |
