Ein PHP-Interface ist als ein Pragma zu verstehen
Betrachte den Code untenstehend, wir haben eine Basisklasse, eine Klassenerweiterung und ein Interface. Die Aufgabe besteht darin, ein SQL-Statement zu erzeugen:
# Dieses Pragma legt fest welche # Methoden zu implementieren sind interface SqlString{ function select(); function from(); function where(); } # Basisklasse class SqlBase{ # SQL Fragmente erfassen function __construct($frag){ $this->FRAG = $frag; $this->SQL = ''; } function __toString(){ return $this->SQL; } } class Moon extends SqlBase implements SqlString{ #class Moon extends SqlBase{ function select(){ $this->SQL .= "SELECT ".join(", ", $this->FRAG['fields']); } function from(){ $this->SQL .= " FROM ".$this->FRAG['tabname']; } function where(){ $this->SQL .= " WHERE julianday < ".$this->FRAG['julianday']; } } # SQL zum Auslesen der Mondphasen $m = new Moon(array( 'julianday' => 2440588, 'tabname' => 'moon', 'fields' => array('julianday','phase'), )); # Rufe die Methoden des Interface auf $m->select(); $m->from(); $m->where(); # SQL String Ausgeben echo $m; # Ergebnis # SELECT julianday, phase FROM moon WHERE julianday > 2440588
Von Interesse ist hier die Deklaration der Klassenerweiterung:
class Moon extends SqlBase implements SqlString
class Moon extends SqlBase
Es zeigt sich, daß der Code dasselbe Ergebnis liefert. Das ändert sich jedoch wenn wir der Interface-Deklaration die Signatur einer weiteren Methode hinzufügen, bspw.:
# Dieses Pragma legt fest welche # Methoden zu implementieren sind interface SqlString{ function select(); function from(); function where(); funtion order(); }
Wenn wir nun die Klassenerweiterung zu class Moon extends SqlBase implements SqlString
deklarieren, erhalten wir eine Fehlermeldung, weil die Interface-Deklaration nunmehr 4 Methoden vorschreibt welche für das Interface zu definieren sind.
Merke: Ein PHP-Interface ist nur ein Pragma was einer Klasse vorschreibt, welche Methoden zu definieren sind. Das eigentliche Interface ist stets eine Methode oder eine Folge von Methoden, die eine Instanz derjenigen Klasse aufruft in welcher diese Methoden definiert sind. Beim Definieren der Interface-Methoden gilt die Vererbung, d.h., wenn alle in der Interface-Deklaration vorgeschriebenen Methoden in der Baisklasse defniert sind, ist die Vorschrift erfüllt. Ansonsten wirft PHP einen Fatal Error.
Ein Interface als ein Aufruf bestimmter Methoden in einer bestimmten Reihenfolge s.w.o. bietet sich an, wenn Prozesse immer nach einunddemselben Schema ablaufen. Wie hier im Beispiel beschrieben, die Erzeugung eines SQL-Statements. Unter bestimmten Umständen, zum Beispiel wenn Benutzereingaben vorliegen und zu verarbeiten sind, kann dieser Ablauf auch zu Verzweigungen derart führen, daß das Ergebnis eine andere Sicht auf die Daten darstellt.
Dem Anwender eines solchen Interfaces schließlich ist es egal, ob die Methoden die er nutzt, mit dem Schlüsselwort interface
deklariert worden sind.
Datenschutzerklärung: Diese Seite dient rein privaten Zwecken. Auf den für diese Domäne installierten Seiten werden grundsätzlich keine personenbezogenen Daten erhoben. Das Loggen der Zugriffe mit Ihrer Remote Adresse erfolgt beim Provider soweit das technisch erforderlich ist. sos@rolfrost.de.