kostenloser Webspace werbefrei: lima-city


OOP PHP (Abstrakte Klassen und Interfaces)

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    master4860

    Kostenloser Webspace von master4860

    master4860 hat kostenlosen Webspace.

    Hallo Com.,
    Ich schaue mir derzeit im Bereich OOP in PHP die Abstrakten Klassen sowie statische und Interfaces an.
    Ich verstehe das statische ohne instanziieren möglich sind zu verwenden. Sprich ohne "new xyz()" sondern halt einfach mit einem "::", also: xyz::methodenname().
    Was ich aber nicht wircklich so verstehe ist der Teil mit den abstrakten Klassen und den Interfaces. Was sind eigentlich jetzt genau Abstrakte Klassen und Interfaces?
    Im Grunde kann man ja sagen die implements besagt, dass die Klasse die Sprache der anderen Klasse sprechen kann und extends sagt das hier die andere Klasse erweitert wird mit zusätzlichen Sprachkenntnissen. Also im allgemeinen habe ich das hier und da verstanden. Aber eigentlich auch wieder nicht :D.

    Nehmen wir mal folgende Schlüsselwörter:
    - abstract
    - catch
    - clone
    - final
    - extends
    - implements
    - interface
    - throw
    - try
    - __autoload()
    - __get()
    - __set()
    - __call()

    Kann wer was mit den Schlüsselwörtern anfangen und mir eben das mit je einem Satz und nem kleinen Code Beispiel erklären?
    Wäre echt perfekt.
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Hallo. :wave:
    Ich versuch dies mal mit meinen Erfahrungen zu erklären.

    abstract
    - Es gibt abstrakte Klassen und Methoden.
    - Abstrakte Klassen können nicht instanziiert werden, können "normale" und abstrakte Methoden besitzen, Sichtbarkeiten können alle da sein (private, protected, public), Klassenvariablen sind möglich.
    - Abstrakte Methoden werden in abstrakten Klassen definiert, diese müssen in der erbenden Klasse definiert werden - die Logik muss geschrieben werden -
    abstract protected function doSth();


    try-catch
    - WIrd in einem try-Block eine Exception geworfen kann man je nach Exception verschiedene Dinge damit tun - Loggen etc
    try {
    //php-code
    // throw Exception
    } catch ( RuntimeException $e ) {
    // print error
    } catch ( Exception $e ) {
    // log
    }


    clone
    - Klont einfach eine vorhandene Instanz einer Klasse in eine andere Variable. Versucht man folgendes
    $otherClass = $classInstance;
    , dann zeigen immernoch beide Variablen auf eine Instanz, will man aber 2 Instanzen an der Stelle haben nimmt man clone. Definiert man
    __clone()
    -Methode in der Klasse, wird diese aufgerufen sobald man versucht die Klasse zu klonen. Dient dazu eventuell gesetzte Ids zu löschen oder andere Klassenvariablen anzupassen.

    final
    - Final Klassen können nicht erweitert werden, dh andere Klassen können diese nicht "extenden".

    extend
    - Vererbung der Klassenvariablen und -methoden, welche nicht private sind.
    - So haben die Kind-Klassen Funktionalitäten der Eltern-Klasse.
    - An der Stelle können dann Methoden und Variablen überschrieben werden, was sogar nötig ist, wenn in der Eltern-Klasse abstrakte Methoden vorhanden sind, sonst wirft PHP einen Fehler.
    - Eine Klasse kan nur eine andere Klasse erweitern, nicht 2.

    implements / Interface
    - Interfaces werden nicht "extended" sondern "imlemented".
    - Die geben an welche (public) Methoden in einer Klasse vorhanden sein müssen. Protected und private über Interface nicht möglich.
    - Im Gegensatz zu abstrakten Klassen kann man hier keine Logik vorschreiben, sondern nur ein Grundgerüst angeben und eine Klasse kann mehr als nur ein Interface implementieren (Kommagetrennt)

    throw
    - Wirft eine Exception.
    - Exceptions sind normale Klassen in PHP, die Standard Exception ist in der PHP Standard Library festgelegt.
    - Man kann eigene Exceptions schreiben, indem man die Standard-Klasse erweitert.

    __autoload()
    - Wird in einer Klasse versucht auf eine andere Klasse zuzugreifen, welche nicht gefunden wird, wird automatisch die autoload-Methode aufgerufen.
    - Die Methode besitzt (mind.) einen Übergabeparameter, nämlich den voll qualifizierten Klassenname (Namespace\Klassenname).
    - Anhand des Klassennamens kann man dann die benötigte Datei, in der die Klasse ist, includen/requiren, dodass man die Klasse benutzen kann.
    - Es gibt allerdings auch andere autoload Möglichkeiten - google hilft.

    __get()
    - Versucht man auf eine Klassenvariable mit nicht vorhandenem Getter zuzugreifen (für protected $_id ruft man zb getId() auf), wird diese magische Methode mit dem Variablenname, welcher nach get steht, als Parameter aufgerufen.
    - dh
    getId()
    wird zu
    __get('id'){}
    .
    - In der Methode kann man dann mittels Parameter auf die Klassenvariable zugreifen.
    - Gibt die Variable per return zurück.

    __set()
    - Im Grunde gleiche wie __get(), nur dass mittels
    setId(1)
    auf
    __set('id', 1)
    gemappt wird.

    __call()
    - Kann ich spontan gerade auch nichts zu sagen.


    Zu den letzten 4 (magischen) Methoden kannst du hier auch nochmal etwas nachlesen: PHP.net Magische Methoden
    Allgemein zu Problemen und Fragen mit/zu PHP kann man sich auf PHP.net informieren

    Hoffe ich konnte helfen.
    Bei Fragen: fragen :thumb:

    Beitrag zuletzt geändert: 12.2.2014 0:31:39 von copynpaste
  4. Autor dieses Themas

    master4860

    Kostenloser Webspace von master4860

    master4860 hat kostenlosen Webspace.

    braucht man die abstrakten Klassen sowie implements / Interfaces ?
    Ich verstehe da noch nicht ganz den Sinn... .

    Interfaces klingt nach Arbeit die den Code nur voller macht aber im Grunde eigentlich nicht wircklich was bringt... . Oder irr ich mich und man benötigt es für etwas wircklich?

    Eventuell kann wer zu abstrakten Klassen und Interfaces mal ein sinnvolles Beispiel mit Code und Erklärung machen, vor allem wozu man abstrakte Klassen und Interfaces überhaupt wircklich benötigt... .
  5. Würde man es nicht brauchen/benutzen, würde es das wahrscheinlich nicht geben.

    Vorallem wenn man mit Code von anderen Entwicklern arbeitet, wie zb bei Frameworks, wird viel mit Interfaces (I) und Abstrakten Klassen (AK) gearbeitet, um dem jeweiligen Entwickler Platz für eigene Implementierungen zu geben, ihn allerdings ein Grundgerüst zu geben, wie eine bestimmte Klasse aufgebaut werden muss, damit diese eben mit dem Framework arbeiten kann.
    Falls du selber privat/für eigene Projekte nur eigenen Code schreibst und diesen auch nicht anderen zur Verfügung stellen willst können I und AK sinnvoll oder aber auch nicht benötigt werden, je nach bedarf.

    Mithilfe von beidem könnte man mit
    instanceof
    auch abfragen, ob die Klasse eine Vererbung einer anderen Klasse oder eines Interfaces ist.

    Hatte mir gerade ein Beispiel mit Tieren überlegt, bis ich gemerkt hatte dass ich da zu viel Müll schreibe.
    Darum ein anderer Verusch: Stell dir vor es gibt ein Interface Tier, welches keine Methoden vorgibt, nur um zu prüfen ob eine erbende Klasse ein Tier ist. So kann man evtl. Über eine (abstrakte-) Klasse Säugetier gehen, welche Tier implementiert, und davon die Klasse Löwe erben lassen. So kann man später beim programmieren sicher gehen, dass man nur versucht mit Klassen zu arbeiten, die auch wirklich die durch Interfaces und abstrakten Klassen vorgegebenen Methoden besitzt.

    Ich hoffe das hat dir die Sache etwas näher gebracht.
  6. Autor dieses Themas

    master4860

    Kostenloser Webspace von master4860

    master4860 hat kostenlosen Webspace.

    Eine Eklärung mit passendem Beispielscode, würde eventuell mir ein wenig mehr helfen.

    Ungefähr habe ich das verstanden... . Aber mit nem passenden Code Beispiel wärs doch noch ein wenig besser.
  7. master4860 schrieb:
    Eine Eklärung mit passendem Beispielscode, würde eventuell mir ein wenig mehr helfen.

    Ungefähr habe ich das verstanden... . Aber mit nem passenden Code Beispiel wärs doch noch ein wenig besser.

    das buch ist nicht das jüngste, aber die problematik hat sich wohl nicht geändert ;)
    das buch: Sebastian Bergmann, Professionelle Softwareentwicklung mit PHP 5, dpunkt.verlag, ISBN 3-89864-229-1
    online lesen: http://professionelle-softwareentwicklung-mit-php5.de/
    deine frage auf seite 76 [Kapitel 5. Erzeugungsmuster]
    link: abstrakte fabrik
  8. Autor dieses Themas

    master4860

    Kostenloser Webspace von master4860

    master4860 hat kostenlosen Webspace.

    Hallo Com.,
    habe noch etwas gefunden über die magischen Methoden in PHP.
    Hier wird es einfach perfekt erklärt, da ich es hier ja angesprochen hatte wollte ich euch dies ebenfalls noch zeigen.
    Eventuell wird es Anderen, hier, genauso viel helfen wie es mir geholfen hat.
    Hier der Link zur entsprechenden Seite.

    :wink:
  9. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!