| | | | |
| |||||||
| PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen |
|
| | LinkBack | Themen-Optionen | Bewertung: |
| | |
| PHP Code Flüsterer Registriert seit: 21.08.2005 Beiträge: 4682 PHP-Kenntnisse: Fortgeschritten | |
| | |
| Benutzer Registriert seit: 16.07.2010
Beiträge: 80
PHP-Kenntnisse: Fortgeschritten ![]() | Eine Datei mehr die ich ändern muss Wenn ich es nach meiner Methode bequemer finde und statt mit Reflection/serialize/call_user_func_array-Constructor-Injection rumzuhampeln mit Setter-Injection arbeite, wo ist dann da das große Problem? Performance, klar, die wird nach deinem Vorschlag etwas besser sein. Es gehen aber nicht sonderlich viele Calls (dafür eben recht unterschiedliche) pro Request darüber, die Module selber laufen dann meist autark. Zumindest halte ich es insofern simpel, als ich die Abhängigkeiten über normalen PHP-Code deklariere, statt über Annotations oder zusätzlich ini/xml/sonstwas-files, was ich wiederum nicht mag. ![]() |
| | |
| | |
| Neuer Benutzer Registriert seit: 15.06.2011
Beiträge: 14
PHP-Kenntnisse: Fortgeschritten ![]() | Der Symfony DIC (wurde bereits genannt - ich kenne leider daneben keine vernünftige Implementierung im PHP-Umfeld, wie weit die Flow3-Typen sind, weiß ich nicht) konfiguriert via yaml, xml oder Plain-PHP. Addons erlauben mittlerweile sowas wie Autowiring via Convention oder PHPDoc/Annotations. Die Konfiguration ist sehr teuer - einerseits muss fleißig geparst werden, und auch das Resolving ist nicht ganz ohne. Daher wird aus der Konfiguration einmalig ein Di-Container erzeugt, der dann nachhaltig zur Verfügung steht. Hier muss nichts erweitert werden oder sonst code-seitig etwas passieren - der DIC ist ein Werkzeug, das einen Erzeuger bereitstellt, der über eine Konfiguration wiederum "sich selbst" persistent generieren kann. Teure Reflection-Calls sind daher ebenso wie das teure Parsing nicht-nativer Formate wie Yaml kein Problem, da das ganze eben nicht zur Laufzeit passiert. Was dabei heraus kommt, ist ein großer, weg-gecachter "Container", der ausschließlich Getter und generierten Initialisierungscode auf die vorkonfigurierten Services trägt. Zu den Vorteilen der Geschichte: Im Grunde ist das ganze eine gute Sache, um sauberen Code zu erzwingen: Schreibt man seine API gegen den Container (oder mit dem Container "In Mind"), spart man sich von vorne herein eine Menge Initialsierungscode, denn der DI-Builder bzw. die Konfiguration nimmt einem genau diese Arbeit ab. Mit dem Sahnehäubchen, dass alles auch noch schön decoupled bleibt - ein Paradigma, das im Daily Business mal schnell auf der Strecke bleibt - wer was anderes behauptet, lügt Leider hat das ganze auch einen Nachteil: So ganz rapid ist das Zeug anfänglich nicht, man braucht ein paar Tage, um sich damit als Entwickler von "DI-Controlled Code" anzufreunden. Noch bitterer trifft es den API-User: PHP-Code: Alle Klassen, die den DIC verwenden, aber nicht selbst Service sind (im Symfony-Kontext sind das Klassen, die bspw. ContainerAware implementieren), gucken in die Röhre - denn hier muss wieder Reflection zur Runtime herhalten, um bspw. Annotations oder Naming-Conventions zu interpretieren, wie es bspw. Grails macht ("xyzService" wird automagisch injected, weil "Service" dran hängt). Und selbst sowas würde den Martin F. wahrscheinlich auf die Palme bringen - gerade die Magie ist ja das, was man vermeiden möchte. Dennoch: Man muss sich die Frage stellen, wo man den "Starting-Point" überhaupt sucht? Klassischerweise ist dieser im Controller zu finden - und es spricht nichts dagegen, Controller gleichfalls als DIC-Managed Service zu definieren - Symfony stellt das zur Wahl. Also letztlich würde ich das ganze als eine praktische Sache bewerten. Geändert von joshiausdemall (16.06.2011 um 00:31 Uhr). |
| | |
| | ||
| Erfahrener Benutzer Registriert seit: 30.07.2008
Beiträge: 1.167
PHP-Kenntnisse: Fortgeschritten ![]() ![]() ![]() | Zitat:
PHP-Code: Da kommt man mit einem einfachen Setter nicht weiter. Daher habe ich mir jetzt eine Klasse geschrieben, die mit folgender Konfiguration arbeitet. Inspiriert ist das Ganze von den DI-Containern von Symfony, APF und Yadif. PHP-Code: Wenn es mehr als 1 $arg gibt, wird das Objekt per Reflection instanziiert, ansonsten einfach per Konstruktor. Wenn Methoden mehr als einen Parameter haben, kommt call_user_func_array zum Einsatz, ansonsten wird einfach die entsprechende MEthode aufgerufen. | |
| | |
|
| Themen-Optionen | |
| Thema bewerten | |
|
|
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| jQuery <div> Container generieren lassen ? | dreamcatcher | JavaScript, Ajax und mehr | 5 | 23.02.2011 14:01 |
| [Erledigt] Mehrere DIV Container mit einem Klick ändern (mit mehreren Request Aufrufe | Lebenssonde | JavaScript, Ajax und mehr | 11 | 26.08.2010 09:01 |
| Netz von Objekten mit Abhängigkeiten darstellen/zeichnen | serPHPico | PHP-Fortgeschrittene | 12 | 25.08.2010 18:52 |
| kürzeren div container authoatisch der höhe des contends anpassen | litterauspirna | HTML, Usability und Barrierefreiheit | 15 | 29.07.2009 00:57 |
| 2 div Container immer gleich lang | Kein Genie | HTML, Usability und Barrierefreiheit | 4 | 27.07.2009 13:38 |
| Links vom Untermenü in Container öffnen | Surfer | PHP Tipps 2008 | 0 | 27.12.2008 19:24 |
| [Erledigt] Zentrieren von a Blocks im DIV Container | Daniel | HTML, Usability und Barrierefreiheit | 21 | 24.09.2008 09:37 |
| [CSS] Container in Container | Igäl | HTML, Usability und Barrierefreiheit | 5 | 04.09.2007 11:29 |
| CSS - Bild im div container überlappt andere container | Buschdieb | HTML, Usability und Barrierefreiheit | 13 | 19.07.2007 23:17 |
| IE6: Container mit Float dabei wird margin doppelt gewertet | DonTermi | HTML, Usability und Barrierefreiheit | 1 | 11.01.2007 09:02 |
| Problem mit Container | max-dhom | HTML, Usability und Barrierefreiheit | 3 | 20.09.2006 11:10 |
| [Erledigt] Dependency/Property Injection | Off-Topic Diskussionen | 1 | 18.05.2006 10:52 | |
| CSS: Verschachtelter Container und Text danach | HTML, Usability und Barrierefreiheit | 2 | 01.12.2005 10:00 | |
| [Erledigt] Container im Firefox falsch dargestellt | HTML, Usability und Barrierefreiheit | 27 | 15.08.2005 23:18 | |
| Besucher kamen über folgende Suchanfragen bei Google auf diese Seite |
| php xml di container, php5 container servicedefinition, php dependency injection container, http://www.php.de/php-fortgeschrittene/81162-dependency-injection-container-4.html |