Was PHP unter einem Interface versteht

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

Das PHP-Interface als ein Pragma

Von Interesse ist hier die Deklaration der Klassenerweiterung:

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.

Das Interface als ein Framework

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. s​os­@rolf­rost.de.