PHP: Objektorientierte Programmierung

Eine Klasse abstrahieren

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Die Abstraktion stellt eine zusätzliche Möglichkeit dar, den Zugriff auf eine Klasse einzuschränken.
06:16

Transkript

Es gibt mehrere Möglichkeiten, um den Zugriff auf eine Klasse einzuschränken, es ist also nicht nur über die Sichtbarkeit möglich, sondern im objektorientierten Programmieren gibt es auch den Ansatz, dass man eine Klasse beziehungsweise eine Methode abstrahieren kann. Das mache ich mit dem Schlüsselwort abstract, ich schreibe also abstract, class, und das wird jetzt der Name, AbstractFamily. Und meine abstrakte Klasse bekommt auch gleich eine abstrakte Methode mit auf den Weg, abstract protectedfunction, und diese Funktion bekommt denselben Namen, wie die Funktion, die ich unten bei Family habe, wenn ich das Ganze später hier verbinden möchte, und dann bekommt es auch noch ein Argument, nämlich $name. So, was ich jetzt hier gemacht habe, ist, ich habe eben eine abstrakte Klasse definiert, und diese abstrakte Klasse beinhaltet eine abstrakte Methode, und zwar nur die Signatur dieser Methode, das heißt, wenn ich später möchte, dass diese abstrakte Klasse erweitert wird, dann muss die Klasse, die diese Klasse erweitert, auf jeden Fall die Signatur übernehmen. Wenn ich versuchen würde, jetzt diese abstrakte Klasse, gleich zu instanziieren, so bekomme ich eine Fehlermeldung. Hier unten instanziiere ich dann eigentlich diese class Family, wenn ich das aber schnell mal austausche und stattdessen sage, AbstractFamily, und das Ganze mit Strg+S speichere, und hier meine Anzeige erneuere, dann sehen Sie, dass ich einen Fehler bekomme, und zwar, dass ich eine abstrakte Klasse nicht instanziieren kann. Gut, dann mache ich jetzt diesen Versuch rückgängig, und gehe den Weg, der eigentlich vorgesehen ist, nämlich indem ich meine normale Klasse Family erweitere, ich kann also sagen, class family extends AbstractFamily, und habe damit jetzt die Voraussetzungen geschaffen, dass ich mit dieser abstrakten Klasse tatsächlich arbeiten kann. Ich habe auch schon die Methode umgesetzt, das heißt, ich habe hier meine Methode mit den selben Namen und auch mit dem selben Argument. Das heißt, wenn ich jetzt wieder mit Strg+S speichere, und mir hier die Anzeige erneuern lasse, dann sollte es kein weiteres Problem damit geben. Ich muss zwar eine abstrakte Methode übernehmen, ich habe aber sehr wohl die Möglichkeit, dass ich sie erweitern kann, das heißt, ich bin jetzt nicht auf nur ein Argument beschränkt, ich könnte genauso einen Separator einführen, und den mit einem direkten Wert versehen, in meinem Fall möchte ich ganz gerne hier unten die Leerzeichen austauschen. das heißt, ich entferne sie, und füge stattdessen meinen Dollar-Separator ein. Und obwohl ich jetzt mehr Argumente habe, als in meiner ursprünglichen, abstrakten Methode, sollte sich hier drüben nichts verändern, ich speichere mit Strg+S, lade die Seite neu, und tatsächlich - es verändert sich nichts. Das heißt, ich muss zwar diese Methode übernehmen, aber ich kann dann noch mit weiteren Argumenten zusätzliche Funktionalität hinzufügen. Was ich allerdings nicht kann, und worauf ich auf jeden Fall achten muss, ist auch die Sichtbarkeit. Ich habe hier im Moment deswegen kein Problem, weil ich in meiner abstrakten Methode die Sichtbarkeit auf protected gesetzt habe, und hier in meiner Umsetzung die Sichtbarkeit auf public steht. Ich könnte hier genauso protected hinschreiben, was ich nicht kann, ist, dass ich restriktiver werde, also ich könnte jetzt nicht sagen, dass ich hier eine private Methode habe, denn wenn ich das jetzt speichere und neu lade bekomme ich eine Fehlermeldung, die mich darauf hinweist, dass der Zugriffslevel nicht passt. Also wechsele ich hier wieder zurück auf public, ja, public geht in meinem Fall hier ganz gut - So - Ich speichere das, ich lade das noch einmal, um die Sicherheit zu haben, das alles funktioniert, und was ich genauso gut tun kann ist natürlich dass ich die Klasse Family noch einmal mit einer Kind-Klasse beehre. Ich habe hier schon eine Kind-Klasse vorbereitet, und meine Kind-Klasse heißt ConcreteChild, und sie erweitert eben die Klasse Family. Das heißt, wenn ich mir dann auch von ConcreteChild Elemente ausgeben lasse, kann ich sehr wohl auch auf die Eltern-Klasse zugreifen, und kann noch meine eigene Methode mitbringen, meine Methode heißt kinderkram und wird hier ebenfalls ausgegeben, wenn ich jetzt speichere und neu lade, so merken Sie, dass es auch in diesem Fall kein Problem ist, auch wenn die Grundlage eine abstrakte Klasse oder eine abstrakte Methode ist, ab dem Moment, wo sie erweitert wird und dann zum Einsatz kommt, sind eigentlich keine wesentlichen Beschränkungen vorhanden. Das Einzige, was eben ist, Sie haben eine sehr gut abgesicherte Hinterlegung der Signatur zum Beispiel von dieser Methode.

PHP: Objektorientierte Programmierung

Lernen Sie alle Aspekte kennen, die bei der Umsetzung des OOP-Programmierstils in PHP eine Rolle spielen.

2 Std. 32 min (34 Videos)
Derzeit sind keine Feedbacks vorhanden...
Software:
Exklusiv für Abo-Kunden
Erscheinungsdatum:23.09.2016

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!