PHP/Definition einer Klasse

Aus Mikiwiki
< PHP
Zur Navigation springen Zur Suche springen

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.
Der Umrechnungsbetrag war: 1.95583