PHP Dependency Injection Container selber bauen | PHP Tutorial

preview_player
Показать описание
In diesem Video zeige ich dir, wie du einfach ein Dependency Injection Container in PHP erstellen kannst. Ich erkläre dir grob wozu dieser gebraucht wird und wie er im Grund funktioniert.

Links zum Video:

Weitere Themenvorschläge und/oder Kooperationen in die Kommentare.

#php #dependency #dicontainer #dependencyinjection
Рекомендации по теме
Комментарии
Автор

Absolut genial! Viele Dank Vitalij! Ich habe mich schon länger gefragt, wie man ein DI-Container aufbaut. Jetzt weiß ich es.

thomasdcodes
Автор

Sehr schönes Video. Ich sitze auch gerade an DI und versuche es zu verstehen. Dank deines Videos verstehe ich das langsam. Ja, bitte auch Video zu PHP-DI machen, weil ich mich damit auch auseinander setze :)

heinrichschiller
Автор

Und ja klar mach gerne ein Video zu PHP-DI. Du erzählst ja was wegen statischen Klassen und Methoden. Ich habe es ja am Anfang genauso gemacht wie schonmal angemerkt hast XD

sven
Автор

Wieder mal klasse erklärt. Aufs wesentliche konzentriert und stückweise aufgebaut. Das Autowiring finde ich auch super, um sich die vielen Konfigurationen der Abhängigkeiten sparen zu können.

VeryBlackMan
Автор

Ich habe noch eine Frage, warum nutzt man dieses "use" bei Minute 3:40 statt die $db Variable als parameter in function($db ) zu übergeben? Was macht dieses use überhaupt? was ist der Unterschied zu einem require oder einem include?

sven
Автор

Mal wieder ein gutes Video, mach weiter so.

eins.oliver
Автор

Ich habe noch eine Frage zu der Klasse DB..
Wo und wie hinterlegt man genau die Zugangsdaten, die man braucht um eine Verbindung zur Datenbank überhaupt erst zu erzeugen?

sven
Автор

Bei Minute 2:07 ist das ein Schreibfehler, du hast da statt construct, constuct stehen. Wenn das so nicht stimmt, dann würde ich das per Infobox oder sowas anzeigen.

sven
Автор

Mach vielleicht auch mal mehr Sprechpausen zwischen einzelnen Absätzen. Auch würde ich den Code vielleicht lieber schreiben statt ihn einzufügen. Das geht zwar schneller, hat aber auch den Nachteil meiner Ansicht nach, dass der Zuschauer erstmal sehr viel Input verarbeiten muss und nicht sieht wie es entstanden ist. Gleichzeitig den neuen Block Quellcode zu betrachten den du eingefügt hast und gleichzeitig dir aufmerksam zuhören, empfinde ich als schwierig. Wie immer soll das nur konstruktive Kritik sein. Ich schätze deine Video sehr.

sven
Автор

Moin, danke fürs hilfreiche Tutorial.

Ich verstehe leider noch nicht, wie ich die anonyme $container Funktion überall verwenden kann. Ich benötige zum einen die DB connection in der index.php (global scope) und zum anderen in einer Controller Klasse. In der index.php ganz oben vom Code erstelle ich normalerweise die db connection und führe ein paar Sachen aus. Ist das "verboten"? :D

Das Problem hierbei wäre ja, dass wenn ich die $container Funktion global deklariere, sie für Controller Klasse unbekannt ist.

alivesurvive
Автор

Du sagst zwar, dass man durch die explizite Injektion die DB-Klasse nicht mehr braucht, aber das stimmt nicht. Du brauchst Du sie eben trotzdem, da Du sie ja in Deiner Klasse verwendest. Mit Interfaces könnte man das zwar noch etwas abschwächen, da man dann zumindest die Funktionalität nicht mitnehmen muss. Das Argument der Wiederverwendbarkeit durch DI finde ich nicht sehr einleuchtend.


Stärkere Argument für einen DI-Container sind meiner Meinung nach
* dass man eine zentrale Stelle hat, an der man einen Objekt-Graphen aufbauen kann,
* dass man Abhängigkeiten leichter auswechseln kann (Macht sich z. B. gut beim Testen)


Vielleicht hättest Du Interfaces an dieser Stelle oder vorher (Oder gibt es da schon ein Video?) erklären können, da damit die Austauschbarkeit erst wirklich gegeben ist.

zielgruppe
Автор

Bei mir gab es eine Fehlermeldung bei folgender Schreibweise
$db = function(){return new database();}

Bei folgender war alles gut
$db = function(){return new database();};

Ist es normal, dass ich ein Semikolon setzten musste? In deinem Video ist keins.

Douglas-Heffernan
Автор

6:35 finde den Discord link nicht. Kannst du in mir geben?

eins.oliver
Автор

Ist es eigentlich normal, dass wenn man eine Klasse über den Container aufruft, sie immer wieder neu instanziiert wird? Meine DB Klasse wird z.B 15x bei jeden Seitenaufruf instanziiert, obwohl ich sie nur über den Container aufrufe. :(

Ich dachte es funktioniert so, dass sie nur 1x instanziiert wird und man sie dann überall nutzen kann.

alivesurvive
Автор

Du hast das zwar echt gut erklärt, aber du bist manchmal etwas zu schnell. Das soll jetzt auch keine Kritik sein, vielleicht bin ich ja auch einfach nur zu langsam, weil ich müde bin XD.
Seis drum, ich muss mir das Video öfter ansehen und pausieren und es wirklich zu verstehen. Ein keiner Tipp von mir. Schreibe doch im Quellcode mehr Kommentare als es einfach nur zu erklären, so hat der Zuschauer auch noch einen Visuellen Anker und muss sich nicht erst erinnern oder zurückspulen um nochmal zu verstehen, was was ist usw.

sven
Автор

Kann ich mir so einen Container auch innerhalb einer Klasse includen oder macht das keinen Sinn?

Douglas-Heffernan
Автор

Ein Tutorial zu Atom.io wäre zB auch super cool. ;)

korbendallas
Автор

Eine zweite Sache ist noch, dass Du bei jedem Funktionsaufruf eine neue Instanz erstellst - Nicht eben praktisch. Da wäre es besser, Du hast ein Array, in dem Du die Abhängigkeiten nach dem ersten Aufruf speicherst.

zielgruppe
Автор

Hat ein Container Array dann nicht die Folge dass die Editor IDE nicht weiß welche Klassen sich in den einzelnen Elementen des Containers befinden. So hätte man ja gar keine Vorschläge für Funktionen.

xLittlePsycho