php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger

PHP Einsteiger PHP Problemlösungen für Spracheinsteiger
Archive: 2004, 2004/2, 2005, 2005/2, 2006, 2007, 2008, 2009, 2010,

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 27.12.2011, 13:31  
archer42
Gast
 
Beiträge: n/a
Standard Interface oder Abstrakte Klasse?

Hallo,
Ich wollte mal Fragen, was jeweils die Vorteile zwischen Abstrakter Klasse und Interface sind. Ich persönlich finde ein Interface besser, da es übersichtlicher ist und man Typehints benutzen kann. Eine abstrakte Klasse hingegen hat zudem noch die Möglichkeit Code, welcher für alle Kindklassen gültig ist zu enthalten um so Redunanz zu sparen.

Was sind noch weitere Anwendungsbereiche, welche die eine Technik der anderen Vorzüge leistet?
  Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 27.12.2011, 13:38  
Benutzer
 
Registriert seit: 12.11.2009
Beiträge: 90
PHP-Kenntnisse:
Fortgeschritten
PiXeL1337 befindet sich auf einem aufstrebenden Ast
Standard

Eine abstrakte Klasse kannst du noch aufrufen

PHP-Code:
MyAbstractClass::MyFunction(); 
__________________
PiXeL1337 ist offline   Mit Zitat antworten
Alt 27.12.2011, 13:39  
meikel
Gast
 
Beiträge: n/a
Standard

abstract nutze ich ab und zu, damit ich mir das Tippern allgemeiner Methoden sparen kann. Allerdings ist mir noch kein zwingender Grund eingefallen, interface nutzen zu müssen.
  Mit Zitat antworten
Alt 27.12.2011, 13:41  
Benutzer
 
Registriert seit: 12.11.2009
Beiträge: 90
PHP-Kenntnisse:
Fortgeschritten
PiXeL1337 befindet sich auf einem aufstrebenden Ast
Standard

Man könnte interfaces nutzen um einheitliche Schnittstellen zu schaffen. z.B wenn mehrere Entwickler an einem Projekt sitzen.
__________________
PiXeL1337 ist offline   Mit Zitat antworten
Alt 27.12.2011, 13:42  
Erfahrener Benutzer
 
Registriert seit: 03.08.2010
Beiträge: 300
PHP-Kenntnisse:
Fortgeschritten
Asterixus sorgt für eine eindrucksvolle AtmosphäreAsterixus sorgt für eine eindrucksvolle Atmosphäre
Asterixus eine Nachricht über Skype™ schicken
Standard

Ich benutze nur abstrakte Klassen, nie Interfaces. Interfaces haben für mich keinen Vorteil, den ich durch abstrakte Klassen nicht auch bekommen könnte. Der einzige wirkliche Vorteil, der mir dennoch einfällt, ist die Code-Completion von Eclipse PDT. Die benötigten Methoden können dort sofort automatisch eingefügt werden.
Asterixus ist offline   Mit Zitat antworten
Alt 27.12.2011, 13:44  
archer42
Gast
 
Beiträge: n/a
Standard

Danke für die vielen schnellen Antworten.
Lassen sich eigentlich auch TypeHints mit Abstrakten Klassen nutzen?
  Mit Zitat antworten
Alt 27.12.2011, 13:49  
Erfahrener Benutzer
 
Registriert seit: 03.08.2010
Beiträge: 300
PHP-Kenntnisse:
Fortgeschritten
Asterixus sorgt für eine eindrucksvolle AtmosphäreAsterixus sorgt für eine eindrucksvolle Atmosphäre
Asterixus eine Nachricht über Skype™ schicken
Standard

PHP-Code:
<?php
abstract class {
    abstract function 
tuWas(array $t);
}
class 
extends {
    function 
tuWas(mysqli $t) {
        
var_dump($t);
    }
}
Gibt das (falls du das mit Typehints meinst):
Fatal error: Declaration of B::tuWas() must be compatible with that of A::tuWas() in C:\Apache2\htdocs\Test\test.php on line 9


@pixel: Das geht aber auch mit abstrakten Klassen
Asterixus ist offline   Mit Zitat antworten
Alt 27.12.2011, 13:55  
archer42
Gast
 
Beiträge: n/a
Standard

@Asterixus
Ja, das meinte ich mit Type Hints.
Das geht also nicht mit Abstrakten Klassen, schade
  Mit Zitat antworten
Alt 27.12.2011, 13:58  
Erfahrener Benutzer
 
Registriert seit: 13.05.2009
Beiträge: 1.164
PHP-Kenntnisse:
Fortgeschritten
dennis81 befindet sich auf einem aufstrebenden Ast
Standard

Abstrakte Klassen und Interfaces sind per Definition schon zu unterscheiden. Kommt halt immer darauf an, was ich haben will. Möchte ich für meine Software Zusicherungen haben, dass gewissen Methoden existieren, die eben auf unterschiedliche Art und weise implementiert werden können, benutzt man eben ein Interface. Da es (Gott sei Dank) keine Mehrfachverererbung gibt, hast du mit abstrakten Klassen irgendwann Probleme, nämlich dann, wenn du mehrere Zusicherungen (Schnittstellen) benötigst. Hier implementiert man dann eben zwei Interfaces. Zwei Klassen erweitern ginge dann schon nicht mehr.
Abstrakte Klassen verwende ich äußerst selten und nur dann, wenn sie an sich schon fast alleine "lebensfähig", d.h. verwendbar wären und nur minimalen Ergänzungen notwendig sind, damit man Objekte davon einsetzen kann (z.B. einen abstrakten Basis-Controller).
__________________
Es ist schon alles gesagt! Nur noch nicht von allen! (Karl Valentin)
Wenn du eine weise Antwort verlangst, musst du vernünftig fragen. (Johann Wolfgang von Goethe)
dennis81 ist offline   Mit Zitat antworten
Alt 27.12.2011, 13:59  
Erfahrener Benutzer
 
Registriert seit: 13.05.2009
Beiträge: 1.164
PHP-Kenntnisse:
Fortgeschritten
dennis81 befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Asterixus Beitrag anzeigen
PHP-Code:
<?php
abstract class {
    abstract function 
tuWas(array $t);
}
class 
extends {
    function 
tuWas(mysqli $t) {
        
var_dump($t);
    }
}
Gibt das (falls du das mit Typehints meinst):
Fatal error: Declaration of B::tuWas() must be compatible with that of A::tuWas() in C:\Apache2\htdocs\Test\test.php on line 9


@pixel: Das geht aber auch mit abstrakten Klassen
Das ist ja auch Blödsinn. Klar gibt das einen Fatal Error. Die Methodendefinition sollte schon identisch sein.
__________________
Es ist schon alles gesagt! Nur noch nicht von allen! (Karl Valentin)
Wenn du eine weise Antwort verlangst, musst du vernünftig fragen. (Johann Wolfgang von Goethe)
dennis81 ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Fehlermeldung Methodensignatur abstrakte Klasse nedelin PHP-Fortgeschrittene 10 16.11.2011 22:25
Klassendesign/Klassenobjekt an andere Klasse übergeben pikachu PHP-Fortgeschrittene 2 29.08.2011 19:37
Wozu brauche ich eigentlich eine abstrakte Klasse? echo PHP Tipps 2010 28 24.11.2010 17:10
Interface in Klasse richtig benutzen, Strategie Pattern litterauspirna PHP Tipps 2010 4 24.11.2010 13:59
Seite nur im Script aufrufbar BlackScorp PHP Tipps 2010 4 03.11.2010 15:57
[Erledigt] Interface vs. Abstract MaxC PHP Tipps 2010 9 18.09.2010 02:38
Von Klasse ableiten UND Interface implementieren? xm22 Software-Design 7 11.08.2010 14:46
[Erledigt] Klasse aus einer anderen Klasse aufrufen Tobby PHP-Fortgeschrittene 7 14.07.2010 20:05
[Erledigt] Nur einer bestimmten Klasse Zugriff andere Klasse erlauben Turamisi Software-Design 2 20.02.2010 20:31
abstrakte Klassen und Interfaces Chriz PHP-Fortgeschrittene 17 16.11.2009 16:09
Klasse für Objekteigenschaft erzeugen? Asipak PHP-Fortgeschrittene 25 30.05.2009 19:45
Methode einer anderen Klasse aufrufen Luka PHP-Fortgeschrittene 15 09.11.2008 14:19
String-Parser Klasse - was muss rein? Matze PHP Tipps 2007 2 08.04.2007 22:14
mehr als eine Klasse einbinden Alpha Centauri PHP-Fortgeschrittene 4 13.04.2006 20:56
Instanz einer Klasse in einer anderen Klasse verwenden Buhmann PHP-Fortgeschrittene 7 28.10.2005 23:12

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php abstrakte klassen schnittstelle, abstrakte klasse vorteile, abstrakte klasse vorteil, php klasse abstrakt gültigkeit

Alle Zeitangaben in WEZ +2. Es ist jetzt 19:40 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum