Teil von  SELFPHP   Teil von  Praxisbuch  Teil von  Neuerungen in PHP 5  Teil von  OOP und PHP 5
  +++ SELFPHP CronJob-Service :: Jetzt auch als Professional-Version verfügbar! +++



:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: SELFPHP Forum ::

Fragen rund um die Themen PHP? In über 120.000 Beiträgen finden Sie sicher die passende Antwort!  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

:: Qozido ::

Die Bilderverwaltung mit Logbuch für Taucher und Schnorchler.   

 
 
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



 




:: Premium-Partner ::

Webhosting/Serverlösungen


Premium-Partner MECO Systemhaus GmbH & Co. KG
Premium-Partner PSW GROUP GmbH & Co. KG
Premium-Partner BPI-Systeme
Premium-Partner Pixel X
Premium-Partner
 

:: SELFPHP Sponsoren ::


Microsoft Deutschland GmbH
twosteps.net - ...Premium-Webhosting
Sedo - Bei uns wird PHP großgeschrieben
hostfactory.ch - OptimaNet Schweiz AG
ZEND - The PHP Company
Kaspersky Labs
HighText iBusiness
SELFPHP Sponsoren
 

Qozido


© 2001-2009 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt