SELFPHP

SELFPHP-Druckversion
Original Adresse dieser Seite:
http://www.selfphp.de/praxisbuch/praxisbuchseite.php?site=241&group=44&page=2
© 2001-2017 E-Mail SELFPHP OHG, info@selfphp.de
© 2005-2017 E-Mail PHP5 Praxisbuch - Matthias Kannengiesser, m.kannengiesser@selfphp.de


OOP – Rundgang


In älteren PHP-Generationen wurden Objekte wie simple Datentypen behandelt, dies hat sich nun geändert. Objekte verweisen nun nicht mehr auf ihren Wert (by value), sondern auf ihr Handle (by reference), ein Handle stellt dabei einen Verweis auf einen Objektbezeichner dar.

Um die Neuerungen aus PHP 5 im Überblick darzustellen, sollten wir uns einem Beispiel zuwenden.

Beispiel

<?php

//--- class ---/
//
// Aufruf zum erstellen einer Klasse!
// Alles, was sich innerhalb der geschweiften
// Klammern des Klassenaufrufs befindet,
// unterliegt der strengen Klassenhierachie
// von PHP 5

class MeineKlasse {

  //
  //--- var ---
  //
  // Die Variablendefinitionen, die innerhalb
  // der Klasse existent sind! Optional können
  // hier Parameter vordefiniert werden!
  // (String,Array,Boolean,Integer)
  //

  var $zeit;
  var $eingabe;
  var $meldung = "Ausgabe beendet!";

  //
  //--- private ---
  //
  // Mit Private definiert man Parameter, die nur
  // innerhalb dieser Klasse aufgerufen werden
  // können und somit NICHT vererbbar sind und von
  // sogenannten Subklassen (Unterklassen) nicht
  // abgerufen werden können!
  //

  private $MathePI;

  //
  //--- __construct ---
  //
  // Diese Funktion wird beim Aufruf der Klasse
  // Automatisch aufgerufen! Dem Konstruktor kann
  // man optionale Parameter  beim Aufruf der Klasse
  // übergegeben. Dieser dient dazu, die Variablen
  // eines Objekts zu initialisieren. Er kann und
  // darf NIE Funktionsergebnis liefern!
  //

  function __construct($eingabe, $zeit) {
    // Nehme den Parameter entgegen und weise ihm die
    // vordefinierten Variable eingabe und zeit zu.
    $this->eingabe = $eingabe;
    $this->zeit = $zeit;
  }

  //
  //--- protected ---
  //
  // Mit protected werden innerhalb der Klasse
  // Funktionen definiert, die nur in der Klasse
  // selbst von anderen Funktionen aufgerufen
  // werden können! Sie sind daher außerhalb
  // der Klasse NICHT ausführbar.
  //
  // Hinweis: print & echo Befehle haben hier
  // nichts zu suchen!
  //

  protected function saved_funk() {
    // Nehme Eigenschaft input und rufe die private
  // Funktion auf!
    return floor(($this->eingabe)*($this->private_funk()));
  }

  //
  //--- public ---
  //
  // Mit public hingegen definiert man eine
  // Funktion, die innerhalb als auch außerhalb
  // der Klasse angesprochen werden darf! Dies
  // gilt übrigens auch für Variablen!
  //

  public function ausgabe_funk() {
      // Rufe die geschützte Funktion auf!
      return $this->saved_funk();
  }

  //
  //--- private ---
  //
  // Der Parameter private ist mit der protected-
  // Funktion vergleichbar, wobei er noch strikter
  // vorgeht. Er verhindert eine Vererbung an
  // weitere Klassen. Privat ist nur in der
  // definierten Superklasse erreichbar und sonst
  // nirgends!
  //

  private function private_funk() {
    // Zuweisung des Werts PI an die Eigenschaft
  // MathePi
    return $this->MathePI = M_PI;
  }

  //
  //--- __destruct ---
  //
  // Ist eine Callback-Funktion, die bei jedem
  // Aufruf der Klasse zurückgegeben wird! Daher
  // auch NICHT Explizit aufgerufen werden muss!
  // Sie ist dann sinnvoll, wenn man einen bestimmten
  // Wert fest zurückgeben möchte! Es werden nur
  // echo- und print-Befehle wiedergegeben!
  //
  // Ausnahme ist hier das Schreiben in Sessions
  // oder Cookies, die zuvor definiert wurden!
  //

  function __destruct() {
    $inhalt  = "Ausgabe " . $this->zeit . "<br>";
    $inhalt .= "Von <b>" . __FUNCTION__ . "</b> aus " . $this;
    $inhalt .= " der Superklasse <b>" . __CLASS__ . "</b><br>";
    $inhalt .= $this->meldung . "<br>";
    echo $inhalt;

  }
}
?>
{PSP}Nachdem Sie sich mithilfe der Beispielklasse einen Überblick über die Struktur einer Klasse verschafft haben, gehen wir nun dazu über, ein Objekt mithilfe der Klasse zu erzeugen.

<?php

echo "<h3>MeineKlasse</h3>";

$zeitStempel = date("h:i:s ", mktime());

// Objekt erzeugen
$meinObjekt = new MeineKlasse(16, $zeitStempel);

// Ansprechen der public-Funktion
$ausgabe = $meinObjekt->ausgabe_funk();
echo "Ergebnis: " . $ausgabe . "<br>";

?>

Ausgabe
MeineKlasse
Ergebnis: 50
Ausgabe 11:45:14
Von __destruct aus Object id #1 der Superklasse MeineKlasse
Ausgabe beendet!

Des Weiteren ist es möglich, ein Objekt zu klonen und ihm neue Parameter zu übergeben.

<?php

// Klon von meinObjekt
$neuesObjekt = clone $meinObjekt;

// Abruf der Funktion über den Klon
$klonausgabe = $neuesObjekt->ausgabe_funk();
echo "Ergebnis: " . $klonausgabe . "<br>";

?>