Guten Tag, ich habe mich in den letzten Tagen ausgiebig mit OOP beschäftigt, habe allerdings beim Thema interface so meine Probleme. Ich verstehe den Sinn von selbigen nicht wirklich. Vorteil habe ich gelesen, ist, dass man eine "Schablone" für die Klasse schafft. Und daher meine Frage: Sollte man für jede Klasse eine interface verwenden und alle Methoden dieser Klasse auslagern, oder nur das Ganze, wenn man mehrere Klassen hat, die dasselbe interface implementieren. Manch einer mag lachen, aber mir mangelts da wirklich an Verständnis.
Ankündigung
Einklappen
Keine Ankündigung bisher.
[Erledigt] Was bringt interface?
Einklappen
Neue Werbung 2019
Einklappen
X
-
Stichworte: -
-
Kurz: Ein Interfaces entkoppelt die Verfügbarkeit von Methoden und dessen Methoden-Signaturen von der eigentlichen Implementierung als Klasse.
Setz du als Typehint eine Klasse, kannst du nur Instanzen dieser Klasse oder ihrer Erben dort übergeben. Setz du als Typehint ein Interface so kann jede Klasse die dieses Interfaces implementiert dort übergeben werden.[URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].
-
Phpyton
Setzt du also Interfaces nur für Typehinting ein. Weil das muss man doch nicht bei JEDER Klasse machen, nur dass sichergestellt ist, dass die Implementierung entkoppelt ist. Oder was sagst du dazu.
Kommentar
-
OOP in PHP finde ich eigentlich ziemlich unnötig, wenn ihr mich fragt.
Interfaces dienen in richtigen OOP-Sprachen lediglich dazu, das implementieren von Methoden zu erzwingen.
Ein Interface enthält also nur Signaturen von Methoden und nicht die Implementierung an sich. Wenn man Objekte miteinander kommunizieren lassen möchte, sind Interfaces also ziemlich sinnvoll.
Wie das in PHP ist, weiß ich nicht, da ich grundsätzlich in Java programmiere.
Hab aber gelesen, dass Interfaces in PHP aufgrund der automatischen Typkonvertierung relativ sinnfrei sein sollen.
Kommentar
-
Weil das muss man doch nicht bei JEDER Klasse machen, nur dass sichergestellt ist, dass die Implementierung entkoppelt ist. Oder was sagst du dazu.
OOP in PHP finde ich eigentlich ziemlich unnötig, wenn ihr mich fragt.
Ein Interface enthält also nur Signaturen von Methoden und nicht die Implementierung an sich. Wenn man Objekte miteinander kommunizieren lassen möchte, sind Interfaces also ziemlich sinnvoll.
Wie das in PHP ist, weiß ich nicht, da ich grundsätzlich in Java programmiere.in richtigen OOP-Sprachen
Hab aber gelesen, dass Interfaces in PHP aufgrund der automatischen Typkonvertierung relativ sinnfrei sein sollen.[COLOR="#F5F5FF"]--[/COLOR]
[COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
„Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
[URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
[COLOR="#F5F5FF"]
--[/COLOR]
Kommentar
-
Zitat von Phpyton Beitrag anzeigenSetzt du also Interfaces nur für Typehinting ein. Weil das muss man doch nicht bei JEDER Klasse machen, nur dass sichergestellt ist, dass die Implementierung entkoppelt ist. Oder was sagst du dazu.
Zitat von Raildex Beitrag anzeigenOOP in PHP finde ich eigentlich ziemlich unnötig, wenn ihr mich fragt.
Interfaces dienen in richtigen OOP-Sprachen lediglich dazu, das implementieren von Methoden zu erzwingen.
Ein Interface enthält also nur Signaturen von Methoden und nicht die Implementierung an sich. Wenn man Objekte miteinander kommunizieren lassen möchte, sind Interfaces also ziemlich sinnvoll.
Wie das in PHP ist, weiß ich nicht, da ich grundsätzlich in Java programmiere.
Hab aber gelesen, dass Interfaces in PHP aufgrund der automatischen Typkonvertierung relativ sinnfrei sein sollen.
Interfaces dienen in allen Sprachen dazu Vorgaben zu machen. Ob das nun Methoden oder Konstanten sind ( in PHP ) oder das Gruppieren mehrer Interfaces zu einem. Es gibt außerdem noch eine (un-)art von Interfaces ( was aber nicht bedeutet das sie worst practice sind ): Marker-Interfaces; die definieren genau 0 Methoden und 0 Konstanten.[URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].
Kommentar
-
Zitat von rkr Beitrag anzeigen@raildex
Wenn du nur provozieren willst: Ich glaube nicht, dass dies ein sinnvoller Weg ist eine interessante Diskussion zu starten.
Solltest du wirklich dieser Meinung anhängen: Änder' sie.[URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].
Kommentar
-
Zitat von rkr Beitrag anzeigen@raildex
Wenn du nur provozieren willst: Ich glaube nicht, dass dies ein sinnvoller Weg ist eine interessante Diskussion zu starten.
Solltest du wirklich dieser Meinung anhängen: Änder' sie.
Ich kann mir im entferntesten auch nicht vorstellen, wo da 'ne Provokation drin sein soll.
Kommentar
-
Zitat von Raildex Beitrag anzeigenInterfaces dienen in richtigen OOP-Sprachen lediglich...
Gewöhn dir einfach an mit Interfaces zu arbeiten. Es ist (fast) überall sinnvoll, wo eine Klasse mit einer anderen zu tun hat. Wenn du noch keine Erfahrung damit hast dann probier einfach eines einzusetzen, und schau ob/welche Vorteile es bringt. Du wirst sehen es bringt vielfach Vorteile und kaum Nachteile, abgesehen davon das man das Gefühl hat alles doppelt zu machen.
Kommentar
-
Du bewertest die OOP-zentrik von PHP als Müll ( also das was PHP im moment unter "thats it!" versteht ), das ist schon irgendwo provozierend in einem PHP-Forum, auch stellst du PHP als unrichtige OOP-Sprache hin ( sowas gibts nicht.. ).[URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].
Kommentar
-
Phpyton
Ich hatte in einem Buch gelesen, dass Interfaces sinnvoll sind, um zu sehen, welche Methoden eine Klasse bereitstellt. Aber das sehe ich doch genauso, wenn ich in die Klasse sehe und dann alle public Methoden sehe. Stellt sich nur die Frage, wie weit die Entkopplung gehen soll. Immer, wenn eine Klasse, oder die Anwendung Methoden der Klasse benötigt, also von aussen darauf zugreift?
Kommentar
-
Wenn das in dem Buch wirklich sinngemäß so steht, würde ich das Buch entsorgen.[URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].
Kommentar
-
Wieso, das Buch hat doch recht. Das Interface einer Klasse sind ja nur dessen Methoden (und öffentliche Eigenschaften). Eine Klasse kann ja auch als Typehint verwendet werden. Dabei zählen nur dessen Methoden (ok, etwas anders ist es da schon).
Ein Interface (als OO-Baustein) beschreibt, was eine Klasse mindestens implementieren muss, damit eine beliebige eine konsumierende Klasse damit arbeiten kann. Beispiel:
PHP-Code:<?php
interface FileSystem {
/**
* @param string $parentDirectory
* @return string[]
*/
public function listDirectories($parentDirectory);
/**
* @param string $parentDirectory
* @return string[]
*/
public function listFiles($parentDirectory);
}PHP-Code:class BuildDirectoryTree {
/**
* @param FileSystem $fs
* @param $parentDirectory
* @return array[]
*/
public function crawl(FileSystem $fs, $parentDirectory) {
$result = array();
$parentDirectory = str_replace('\\', '/', $parentDirectory);
$directories = $fs->listDirectories($parentDirectory);
foreach($directories as $directory) {
$result += $this->crawl($fs, $result[] = $this->concat($parentDirectory, $directory));
}
$files = $fs->listFiles($parentDirectory);
foreach($files as $file) {
$result[] = $this->concat($parentDirectory, $file);
}
return $result;
}
/**
* @param string $a
* @param string $b
* @return string
*/
private function concat($a, $b) {
return rtrim($a, '/') . '/' . ltrim($b, '/');
}
}
Und immer schön Lizkov, wa?
Kommentar
Kommentar