Teil von  SELFPHP   Teil von  Praxisbuch  Teil von  Neuerungen in PHP 5  Teil von  OOP und PHP 5
Letztes Update: 04.09.2007 20:49:50

Navigation

Seite Startseite
Seite Aktuelles
Seite Seite News*
Seite Seite Pressemitteilungen*
Seite SELFPHP
Seite Seite Über SELFPHP
Seite Seite Werbung
Seite Seite Kontakt
Seite Seite Unsere Banner
Seite Seite Impressum
Seite Qozido
Seite Seite Diving Edition
Seite Seite Snorkeling Edition
Seite SELFPHP Dokumentation
Seite Seite PHP-Skripte
Seite Seite PHP Befehlsreferenz
Seite Seite PHP 5 Praxisbuch
Seite Seite PHP Code Snippets
Seite Seite SELFPHP in Buchform
Seite Anbieterverzeichnis
Seite Seite Globale Branchen
Seite Seite Webhosting/Server
Seite Services
Seite Seite Forum*
Seite Seite RSS-Feeds*
Seite Seite Downloads*
Seite Seite Gratis-Video-Lektionen*
Seite Seite SELFPHP auf Heft-CD*
Seite Seite Newsletter*
Seite Internet Security
 sponsored by  
Seite Stellenangebote*
Sedo - Bei uns wird PHP großgeschrieben
Seite Premium-Partner   
Webhosting/Serverlösungen
Seite Produktempfehlung   
Seite Seite SteadyBackup

 
* Link führt ins Internet


Anbieterverzeichnis
Informieren Sie sich über die Unternehmen in unserem Anbieterverzeichnis!  
 


SELFPHP Forum
Fragen rund um die Themen PHP? In über 100.000 Beiträgen finden Sie sicher die passende Antwort!*  


Newsletter
Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!*

Vorname: 
Name:
E-Mail:
 




 

Abstraktion von Klassen und Methoden




Werden Klassen oder Methoden als abstract gekennzeichnet, wird der Benutzer explizit dazu aufgefordert, hier eigenen Code zu schreiben. Somit ist abstract das genaue Gegenteil von final – statt des ausdrücklichen Verbots folgt nun das ausdrückliche Gebot. Der Entwickler der Klassen gibt damit Struktur, Namen und Aufbau vor, nicht jedoch die konkrete Implementierung, da dies möglicherweise von der Anwendung abhängt.

Eine Ableitung von Objekten von abstrakten Klassen ist nicht möglich. Es muss deshalb immer eine Implementierung erfolgen. Dies gilt auch für abstrakte Methoden. Es ist jedoch möglich, eine Klasse als abstrakt zu definieren und einige der Methoden bereits voll auszuformulieren.

<?php

// Durch abstract wird die Klasse für direkte
// Aufrufe blockiert
abstract class SuperKlasse {
  // Die Variable $wert mit protected verriegeln
  protected $wert = 5;

  // Funktionsname zur Vererbung freigeben
  abstract function ausgabe();

  function multiplitzieren($eingabe) {
     return $eingabe*$this->wert;
  }
}

// Unterklasse (Subklasse)
class ErweiterteKlasse extends SuperKlasse {
  // RICHTIG
  function ausgabe() {
    // Die Funktion ist der Abstract-Klasse bekannt und kann
    // somit auf sie zugreifen!
    return $this->multiplitzieren(10);
  }

  // FALSCH
  function ausgeben() {
    // Dies kann nicht funktionieren, da die Funktion
    // ausgeben() der Abstract-KLASSE nicht bekannt ist!
    return $this->multiplitzieren(10);
  }

}

// Aufruf der extends-Klasse
$testObjekt = new ErweiterteKlasse();

// Nicht vergessen! Die Funktion ausgabe() kann nur
// bei der extends(vererbten)-Klasse aufgerufen werden,
// nicht bei der Superklasse, die mit abstract
// verriegelt wurde!
echo  $testObjekt->ausgabe();

?>

Ausgabe
50

Beispiel

<?php
// mit abstract die Klasse für direkte Aufrufe blocken
abstract class Fahrzeug {
  // Variable $tueren mit protected verriegeln
  protected $tueren = 4;

  // Gebe Methodenname zur Vererbung Frei
  abstract function ausgabe();

  function starten($wert) {    
     return  $wert . " mit " . $this->tueren . " Türen wurde gestartet!";
  }
}

// Erstelle Subklasse und nehme mit extens die abstract-OberKlasse
class PKW extends Fahrzeug {
  // RICHTIG
  function ausgabe() {
    // Die Funktion ist der abstrakten Klasse bekannt und
  // kann somit auf sie zugreifen!
    return $this->starten("PKW");
  }
  
  // FALSCH
  function abfahren() {
    // Das kann nicht funktionieren, da die Funktion
    // abfahren() der abstrakten Klasse nicht bekannt
  // ist!
    return $this->starten("PKW");
  }
}

// Aufruf der Klasse
$meinpkw = new PKW();

// Achtung: Die Funktion ausgabe() kann lediglich bei der
// extends (vererbten) Klasse aufgerufen werden, nicht bei
// der Oberklasse, die mit abstract verriegelt ist!
echo  $meinpkw->ausgabe();

?>



Ausgabe
PKW mit 4 Türen wurde gestartet!

Hinweis: Der Sinn einer abstrakten Klasse liegt darin, dass wenn man eine Vererbung auf mehrere Oberklassen vornimmt, es zu keinen Variablenverletzungen kommen soll. Sie ist also bei mehrfacher Vererbung sehr zu empfehlen!

Abschließend noch einige Besonderheiten, die es beim Einsatz von abstract zu beachten gilt:
  • Von abstrakten Klassen kann kein Objekt instanzliiert werden.
  • Von einer abstrakten Klasse kann nur abgeleitet werden.
  • Methoden abstrakter Klassen, die selbst als abstract definiert sind, müssen bei einer Ableitung implementiert werden.
  • Eine abstrakte Klasse kann Methoden enthalten, die nicht als abstract definiert sind. Sobald jedoch eine Methode als abstract definiert ist, muss auch die Klasse insgesamt abstract sein.



 




 sponsored by

Sedo - Bei uns wird PHP großgeschrieben


VERIO - An NTT Communications Company


HighText iBusiness


Webspace-Verkauf.de


video2brain




 Premium-Partner
 Webhosting/Serverlösungen

BPI-Systeme


Premium-Partner Pixel X


Premium-Partner First Colo


Premium-Partner dogado Internet




Qozido


© 2001-2008 E-Mail SELFPHP - Damir Enseleit, info@selfphp.deImpressumKontakt