• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

was bedeutet interface bei Klassen?

Status
Für weitere Antworten geschlossen.

CrackPod

Neues Mitglied
Hallo

Code:
<?php 
interface FormValidationRule { 
    public function validate($str); 
    public function getErrorMsg(); 
} 
?>

was bedeutet das interface hier? Ich kenn das nicht und hab auch im manual nix gefunden, wusste allerdings auch nich, wonach ich suchen sollte.

Aufgerufen wird das ganze dann per
Code:
class CharRule implements FormValidationRule { 
    public function validate($str) { 
        return ! preg_match('/[^a-zA-Z]/', $str); 
    } 
     
    public function getErrorMsg() { 
        return 'Feld besteht nicht nur aus Buchstaben!'; 
    } 
}

Erklärt mir das einer?
 
Werbung:
Werbung:
Ein "interface" ist das, was es aussagt. Eine Schnittstelle.

Im Manual findest du den entsprechenden Abschnitt hier:
:arrow: Object Interfaces

Wenn du ein Interface implementierst ("implements"), dann bist du dazu verpflichtet die Methoden, die im Interface definiert wurden zu implementieren.
Hört sich etwas doof an, ist aber eigentlich ganz einfach.

In deinem Beispiel würdest du eine Fehlermeldung erhalten, wenn du eine der beiden Methoden nicht implementieren würdest. Teste es mal aus .. "try & error" ist immer noch das Beste.

Da PHP Typenlos ist, ist die Verwendung von Interfaces sicherlich immer ein Diskussionspunkt. Ich verwende sie allerdings gerne um eine klare Struktur in Frameworks etc. einbringen zu können.

Bei Fragen .. stell sie.
Grüße, Ben.
 
wozu ist denn dann der Zweck von diesen Interfaces?
So wie ich das verstanden habe, dienen Interfaces nur dazu, eine klasse mit Methoden vorzugeben. Die Methoden jedoch werden in keinerlei Hinsicht "formatiert" (also die Funktionen bekommen nichts zu tun). Da kann ich doch dann auch gleich das mit dem implement und den Interfaces lassen, wenn ich dasselbe in die Klasse, die implementiert eh nochmal schreiben muss.
Ich hab so das dumpfe Gefühl, was richtig falsch verstanden zu haben.
 
Also der Sinn von Interfaces.

Stell dir vor, du hast eine Klasse: HTML_Highlighter.
Jetzt sollen andere (weil mehrere an dem Projekt arbeiten) andere Klassen erstellen, wie PHP_Highlighter, C_Highlighter, Python_Highlighter, ... .
Die einzelnen Klassen müssen die Methode Highlight:string(Text:string) implementieren, da sie von dem eigentlichen Highlighter aufgerufen werden.

Jetzt schreibst du ein Interface namens Highlighter und schreibst dort die Methode hinein. Alle anderen Klassen müssen diese als Interface implementieren.

Der Sinn des ganzen liegt also darin, eine Struktur aufzustellen, die von jeder Klasse, die dieses Interface implementiert erfüllt werden muss. So kann in jeder Klasse etwas ganz anderes stehen, nur die Methoden müssen vorhanden sein.
Das ganze macht vor allem in objektorientieren Sprachen Sinn.

Edit:
Eine besondere Bedeutung haben Schnittstellen (engl. interface) in der Objektorientierten Programmierung: Hier werden sie verwendet, um für bestimmte Klassen festzulegen, welche Methoden sie unterstützen müssen und an welchen Stellen Instanzen dieser Klasse verwendet werden dürfen.
Quelle: Wikipedia: Interface

Siehe dazu auch:
Wikipedia: Schnittstellen in der objektorientierten Programmierung
 
Werbung:
Anders gesagt garantieren sie die Austauschbarkeit von Komponenten [Klassen]. Du hast eine gleichbleibende Schnittstelle auf mehrere Klassen und kannst sie so ohne bedenken autauschen.
 
also geht es quasi darum das ich hiermit:
Code:
class interface Schnittstelle {
    function textAusgabe($str);
}
class AusgabeNormal implements Schnittstelle {
    function textAusgabe($str) {
        echo $str;
    }
}
class AusgabeRot implements Schnittstelle {
    function textAusgabe($str) {
        echo '<span style="clor:red;">'.$str.'</span>';
    }
}
$str = 'Hello foo and bar';
$normal = new AusgabeNormal();
$normal->textAusgabe($str);
echo '
';
$rot = new AusgabeRot();
$rot->textAusgabe($str);
Den String verschiedenfarbig schreiben(oder, wenn man sich auf das Bsp von Artemis bezieht) hervorheben kann, ohne was an dem eigentlichen Code ändern zu müssen?
 
Werbung:
ja, hier noch ein beispiel:

Code:
function higlight($hl, $str){
  $hl->make($str);
  $hl->out($str);
}

class interface hl{
  function make($str);
  function out($str);
}

class rot implements hl{
  function make($str){
    // bla
  }
  function out($str){
    // bla
  }
}

class blau implements hl{
  function make($str){
    // bla
  }
  function out($str){
    // bla
  }
}

der funktion highlight ist es egal, ob du jetzt ein objekt der klasse rot oder balu übergibst, da beide die erforderlichen funktionen bereitstellen (müssen, wegen dem interface).
wäre das interface nicht, so könnte bei der klasse blau die funktion out auch output heißen und dann gäbe es einen error, beim funktionsaufruf.
 
Ich weiß jetzt nicht genau was du meinst.

Ein Interface ist dazu da, um bestimmte Funktionen bereitzustellen, in jeder Klasse die das Interface "erbt".
 
Werbung:
Ein Interface kann man nicht instanziieren, falls du das damit meinen solltest.
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben