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:
 




 

Interface – Objektschnittstellen




Vor allem bei umfangreichen PHP-Anwendungen kommt es äußerst selten vor, dass lediglich ein einzelner Entwickler daran arbeitet. Angenommen, Sie gehören zu einem Team von Entwicklern, bei dem jeder einzelne Entwickler an einem separaten Teil – d. h. einer anderen Klasse – einer umfangreicheren PHP-Anwendung arbeitet. Die meisten dieser Klassen stehen miteinander nicht in Beziehung. Dennoch müssen die verschiedenen Klassen miteinander kommunizieren können. Sie müssen also eine Schnittstelle oder ein Kommunikationsprotokoll definieren, das alle Klassen befolgen.

Eine Möglichkeit wäre, dass Sie eine Kommunikationsklasse erstellen, welche sämtliche Methoden definiert, und dann jede einzelne Klasse dieser übergeordneten Klasse erweitern oder von ihr erben lassen. Da die Anwendung jedoch aus unverwandten Klassen besteht, ist es nicht sinnvoll, sämtliche Klassen in eine gemeinsame Klassenhierarchie zu pressen. Die bessere Lösung ist das Erstellen einer Schnittstelle, in der die Methoden deklariert werden, die diese Klassen zur Kommunikation verwenden. Anschließend können Sie jede Klasse diese Methoden implementieren lassen, d. h. ihre jeweils eigenen Definitionen zur Verfügung stellen. Für eine erfolgreiche Programmierung sind in der Regel keine Schnittstellen erforderlich. Werden Schnittstellen sinnvoll eingesetzt, kann das Design Ihrer Anwendung effektiver, skalierbarer und leichter zu pflegen sein.


Schnittstellen – Definition

In der objektorientierten Programmierung sind Schnittstellen (engl. interfaces)  mit Klassen vergleichbar, deren Methoden deklariert wurden, die aber sonst nichts anderes »tun«. Eine Schnittstelle setzt sich somit aus »leeren« Methoden zusammen. Eine andere Klasse kann die von der Schnittstelle deklarierten Methoden implementieren. Objektschnittstellen können auch als Sonderfälle von abstrakten Klassen gelten. Schnittstellen werden mit dem Schlüsselwort interface, gefolgt von einem Namen, deklariert und enthalten per Definition nur abstrakte Methoden. Auf die explizite Angabe von abstract bei Methoden kann verzichtet werden. Im Unterschied zu abstrakten Klassen werden Schnittstellen mit dem Schlüsselwort implements von einer Klasse implementiert.


Schnittstellen erstellen

Schnittstellen werden auf dieselbe Art und Weise erstellt wie Klassen. Schnittstellen deklarieren Sie mit dem Schlüsselwort interface. Darauf folgen der Name der Schnittstelle und dann die geschweiften Klammern, die den Körper der Schnittstelle definieren.

Innerhalb von Schnittstellen dürfen keine Eigenschaften enthalten sein, und von sämtlichen Methoden darf nur der »Kopf« geschrieben werden, direkt abgeschlossen mit einem Semikolon, statt der geschweiften Klammern.

Bei der Implementierung wird wie bei der Klassenvererbung vorgegangen, anstatt extends kommt jedoch das Schlüsselwort implements zum Einsatz.

<?php

interface einInterface {
  public function machWas();
}

interface anderesInterface {
  public function machWasAnderes();
}

class MeineKlasse implements einInterface, anderesInterface {
  public function machWas() {
    // ...
  }

  public function machWasAnderes() {
    // ...
  }
}

?>

Wie Sie sehen, kann eine Klasse eine beliebige Anzahl an Schnittstellen über das Schlüsselwort implements implementieren.

Da die Klasse MeineKlasse die Schnittstellen einInterface und anderesInterface implementiert, können Objekte dieser Klasse beispielsweise an Methoden übergeben werden, die als Parameter ein Objekt vom Typ MeineKlasse, einInterface oder anderesInterface erwarten, sämtliche dieser Typanforderungen kann ein solches Objekt erfüllen.

Abschließend habe ich noch ein vertiefendes praktisches Beispiel für Sie.


Beispiel

<?php

interface Warenkorb
{
  function ArtikelPlatzieren($artikel);
  function ArtikelEntfernen($artikel);
}

class Onlineshop implements Warenkorb
{
  private $bestellung = array();
  private $auftrag;
    
  function ArtikelPlatzieren($artikel)
  {
    array_push($this->bestellung, $artikel);    
  }
  
  function ArtikelEntfernen($artikel)
  {    
    if (in_array($artikel, $this->bestellung)) {      
      $raus =  array_search($artikel,$this->bestellung);        
      unset($this->bestellung[$raus]);
    }    
  }
  
  function Bestellen()
  {    
    foreach ($this->bestellung as $key)
    {
      $auftrag .= $key . "\n";
    }
    return $auftrag;
  }
}

$kunde = new Onlineshop();
$kunde->ArtikelPlatzieren("Sony TV X100");
$kunde->ArtikelPlatzieren("Panasonic DVR");
$kunde->ArtikelPlatzieren("ActionScript Praxisbuch");
$kunde->ArtikelPlatzieren("5 Kilo Hanteln");

echo "Im Warenkob (nach Artikelplatzierung):\n" . $kunde->Bestellen() . "\n";


$kunde->ArtikelEntfernen("Panasonic DVR");

echo "Im Warenkob (nach ArtikelEntfernen):\n" . $kunde->Bestellen() . "\n";

?>

Ausgabe
Im Warenkob (nach Artikelplatzierung):
Sony TV X100
Panasonic DVR
ActionScript Praxisbuch
5 Kilo Hanteln

Im Warenkob (nach ArtikelEntfernen):
Sony TV X100
ActionScript Praxisbuch
5 Kilo Hanteln



 




 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