verständnisfrage zu interfaces

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • verständnisfrage zu interfaces

    PHP-Code:
    interface blubb
    {
        public function 
    blubber($schwall);
    }

    class 
    bla implements blubb
    {
        public function 
    blubber($schwall)
        {
           ...
        }

    in wie weit müssen die parameter bei den methoden übereinstimmen, bzw. identisch sein, müssen sie das überhaupt?
    PHP-Code:
    interface blubb
    {
        public function 
    blubber();
    }

    class 
    bla implements blubb
    {

        public function 
    blubber($schwall)
        {
           ...
        }

    wirft keinen fehler (E_STRICT) aus, also wozu benötige ich die parameter dann in der methode des interfaces? haben die überhaupt einen sinn?

    gruß
    peter
    EDIT:
    kommando zurück, mein error_reporing scheint einen hau zu haben
    Zuletzt geändert von Kropff; 26.01.2007, 20:04.
    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
    Meine Seite

  • #2
    jetzt verstehe ich nur noch bahnhof. so was wie
    PHP-Code:
    interface blubb
    {
        public function 
    blubber();
    }

    class 
    bla implements blubb
    {
        private function 
    dumdidum($schwall)
        {
           
        }
    }
    echo 
    'test';
    echo 
    blabla
    sollte doch einen fehler auswerfen, oder zumindest ein "test". aber garnichts! leere seite, keine fehlermeldung, nichts. arbeite unter suse 10.1 und habe keine ahnung, warum keine fehler kommen.

    gruß
    peter

    EDIT:
    alles zurück, meine kiste hat sich teilweise weggehängt, und das error_reporting war weg. meine frage hat sich erledigt
    Zuletzt geändert von Kropff; 26.01.2007, 20:25.
    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
    Meine Seite

    Kommentar


    • #3
      Hi,

      auch wenn es jetzt geklärt ist. Ganz grundsätzlich muss man von
      einer sprache die interfaces direkt unterstützt erwarten können, dass
      deren semantik dem aus der OOP bekannten modellen entspricht.
      Das bedeutet natürlich dass die methodensignatur (inclusive parameter)
      für das interface verbindlich ist. Wäre das nicht so
      hätte man kein interface per se. Interfaces sind dazu da eine klar
      definierte schnittstelle zur klasse zu schaffen. Das ist ein wichtiger
      teil des design-by-contract pardigmas. Eigentlich gehören dazu auch
      noch definitionen des funktionsergebnisses, was jedoch in php
      zumindest auf syntaktischer ebene keine rolle spielt. Dem interface
      wohnt aber darüber hinaus noch ein inherentes protokoll inne.
      Das interface "verspricht" dem clientprogrammierer ein bestimmtes
      verhalten. Sowohl der clientprogrammierer als auch der interfacepprogrammierer
      müssen ihren teil der abmachung einhalten. Alle details dieses
      vertrags lassen sich nicht syntaktisch ausdrücken bzw. sind nur
      implizit ablesbar oder durch konsultation der interface dokumentation.
      Die zusicherung bedeutet lediglich: "wenn ich x1 bis xn paramter
      vom typ y1 bis yn erhalte, dann liefere ich n ergebnisse vom typ z1 bis
      zn.
      Seiteneffekte sind nicht ablesbar und auch fehlerverhalten ist
      nicht immer ablesbar. Andere sprachen lösen das beispielsweise
      durch "thows"-annotationen an der signatur. All das leistet php
      zumindest syntaktisch nicht, muss es aber auf grund der dynamischen typisierung und des ausführungskontextes nicht
      unbedingt. Wenn mich nicht alles täuscht sind typen die explizit
      via type hinting in der interfacespezifikation angegeben wurden
      dann auch verbindlich.

      greets
      (((call/cc call/cc) (lambda (x) x)) "Scheme just rocks! and Ruby is magic!")

      Kommentar


      • #4
        eine frage ich noch. in wie weit ist die benamung der parameter entscheidend? ein
        PHP-Code:
        interface blubb
        {
            public function 
        blubber($schwall);
        }

        class 
        bla implements blubb
        {
            public function 
        blubber($suelz)
            {
               ...
            }

        wirft keinen fehler aus. lassen wir mal das problem der typisierung aussen vor. ist es richtig, dass in php nur die anzahl der parameter einer klassenmethode entscheidend ist und nicht deren benamung?
        gruß
        peter
        Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
        Meine Seite

        Kommentar


        • #5
          Original geschrieben von Kropff
          lassen wir mal das problem der typisierung aussen vor. ist es richtig, dass in php nur die anzahl der parameter einer klassenmethode entscheidend ist und nicht deren benamung?
          namen sind schall und rauch.
          aber typen oder initialparameter kannst du auch festlegen:
          PHP-Code:
          interface blubb
          {
            public function 
          blubber(array $schwall);
          }

          // oder

          interface blubb
          {
            public function 
          blubber($schwall=true);

          ... unde wenn die komponente das interface nicht richtig implementiert, gibt es auch einen fehler.

          Kommentar

          Lädt...
          X