| | | | |
| |||||||
| PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen |
|
| | LinkBack | Themen-Optionen | Thema bewerten |
| | |
| PHP Code Flüsterer Registriert seit: 21.08.2005 Beiträge: 4682 PHP-Kenntnisse: Fortgeschritten | |
| | |
| Gast
Beiträge: n/a
| hi, du solltest niemals globals in deinem code benutzen. falls du doch globale objekte benötigst dann ist der singleton schon die richtige wahl. alternativ kannst du dir auch mal anschauen was eine registry ist. zur implementation : PHP-Code: Sike ps. http://www.phppatterns.com/index.php...leview/75/1/1/ |
|
| | ||
| Erfahrener Benutzer Registriert seit: 15.08.2004
Beiträge: 2.473
![]() | Von dem Pattern halte ich nichts. Zitat:
Dass Du davon ausgehst, dass es nur eine Datenbankverbindung geben kann, und nicht mehrere, empfinde ich als stärkere Einschränkung der Wiederverwendbarkeit als die Verwendung einer globalen Variable. Der ganze Aufwand, den Du hier betreibst, ist IMHO bestenfalls nen Becher warme Spucke wert. Eine Möglichkeit, statische Klassenvariablen in PHP 4 umzusetzen, sind übrigens statische lokale Variablen in statischen Methoden: PHP-Code:
__________________ mod = master of disaster | |
| | |
| | |||
| Gast
Beiträge: n/a
| Hi, hätte ich doch genauer hinschauen müssen... Danke! Zitat:
Zitat:
Mfg | ||
|
| | ||
| Erfahrener Benutzer Registriert seit: 24.12.2004
Beiträge: 1.814
![]() | Zitat:
ich hatte ein wunderbares framework, das eine eigene DB-abstraktion als singleton instanziiert hat... also hat ungefähr jede methode, die mit der datenbank zu tun hatte, ein $db = & singleton('DB'); drin. alles schön und gut, alle teilen sich das objekt - aber was machst du, wenn du auf einmal nicht ein objekt der klasse MeineKleineDbAbstraktion, sondern der klasse DB_common brauchst? dann kannst du in 50 klassen und 20.000 zeilen code alle singleton-aufrufe ändern und die schnittstellen erweitern. kostet ca. 2 tage und wenn du nicht ordentliche tests am laufen hast, kannst du das ganze vergessen. ein anderer aspekt ist die testbarkeit ... ich persönlich verwende gern für die unit tests eine eigene datenbank und ein paar dummy-objekte. wenn man singletons benutzt, kann man damit gar nichts anfangen, denn man kann das verhalten der methoden nicht mehr von außen steuern. mein derzeitiger tipp: eine AbstractFactory / Factory, die referenzen auf die 'wichtigen' objekte hält. wenn du ein singleton-artiges objekt haben willst, steuert das die factory. PHP-Code: und die factory alleine steuert, ob sie beim aufruf von getDb() eine neue instanz erzeugt oder immer wieder das selbe objekt zurückgibt. | |
| | |
| | |||
| Gast
Beiträge: n/a
| Zitat:
Eine Verbindung zu DB ist eigentlich immer der Fall weitere Connection sind eher Ausnahme aber selbst da lässt sich was machen. In dem Beispiel braucht er nur die Reihenfolge der Instanzierung kennen und nehmen wir mal an das die 1. Instance Grundsätzlich die Hauptverbindung zur DB ist braucht er noch nicht mal mehr eine Variable zu übergeben. PHP-Code: | ||
|
| | ||||||||
| Erfahrener Benutzer Registriert seit: 15.08.2004
Beiträge: 2.473
![]() | Zitat:
Zitat:
Ich gehe eigentlich davon aus, dass die Leute hier im Profi-Forum auch mal an etwas komplexeren Projekten arbeiten, wo eben auch eigentlich uneigentliche Dinge schonmal gefordert werden. Zitat:
Zitat:
Es geht hier schliesslich un "Wiederverwendbarkeit". Dafür darf die Klasse keine unnötig einschränkenden Annahmen machen (wie z.B. "nur eine DB-Verbindung"), und sie muss mit möglichst geringem Aufwand verwendbar sein. Die Übergabe eines Parameters kann vom Aufwand her ignoriert werden (da O(1)), die Konzeptionellen Vorteile der Übergabe als Parameter hingegen nicht. Zitat:
Wiederverwendbar ist es, wenn es in der gleichen Form überall läuft. Wenn jemand den Code anpassen musste, ohne dass diese Anpassungen von allen anderen benutzt werden können, war es eben nur "anpassbar". Und ich wiederhole nochmal, was axo schonmal gesagt hat: Das Singleton tut genau dasselbe wie eine globale Variable. Konzeptionell ist es das gleiche, die einzigen Unterschiede sind das angezogene OOP-Mäntelchen, dass bestenfalls nen Becher warme Spucke wert ist, und die Kapselung im Namensraum der Klasse, was etwas mehr Wert ist aber nicht viel.
__________________ mod = master of disaster | |||||||
| | |
|
| Themen-Optionen | |
| Thema bewerten | |
|
|
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| MySQL Server startet nicht mehr richtig... | Datenbanken | 16 | 03.03.2006 19:40 | |
| Suche Tipps für Persormance-Steigerung (Geld für Nützliches) | Beitragsarchiv | 18 | 16.08.2005 10:57 | |
| [Erledigt] Mysql Datenbanken Parallel nutzen ? | Datenbanken | 3 | 31.08.2004 20:24 | |
| [Erledigt] PHP5 &a m p; MySQL | Datenbanken | 5 | 01.08.2004 05:47 | |
| Besucher kamen über folgende Suchanfragen bei Google auf diese Seite |
| php statische mysql, java mysql singleton, mysql pattern, java mysql database class singleton, php4 statische klassenvariable, datenbank entwurfsmuster, manager pattern php, mysql objekte, php mysql design-patterns, verschiedene datenbanken entwurfsmuster, pattern datenbanken, php mysql klasse pattern, mysql design pattern, php registry, php registry pattern erweitert, registry pattern php mysql, mysql db registry pattern, wiederverwendbares mysql objekt java, php static mysql database connectzion, mysql objekt |

Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.