![]() |
| | Themen-Optionen | Thema durchsuchen |
| | Nach oben #1 |
| Benutzer Registriert seit: 22.11.2006 Ort: Haan
Beiträge: 50
|
Hi, zunächst mal vorweg, ich rede nicht von register_globals! Also meine Frage ist ganz einfach, vielleicht hat der ein oder andere schon Erfahrungen gemacht. Ich schreibe gerade an einem System indem ich eine Variable (bsp. $XY). Diese Variable ist ein Objekt welches unteranderem die Datenbank Verwaltung und Smarty (Templatesystem) enthält. Jetzt fragen sich wahrscheinlich die ersten, wozu das ganze? Ganz einfach ich möchte das ganze System etwas "Zentralisieren". Vor allem in Klassen und Funktionen ist es doch schneller "global $XY" als "global $Smary, $db, $mail....". So jetzt denke ich mir hmm doch recht Praktisch, aber wahrscheinlich wird diese Variable doch recht viel Speicher fressen. Wie sieht es aus? Jemand Erfahrungen oder ist meine Sorge unbegründet?! Gruß nox |
| | |
| | Nach oben #2 |
| Der Student Registriert seit: 03.01.2007 Ort: München
Beiträge: 86
|
Wieso sollte die Variable "Speicher" fressen. Bei Objekten sind es nur Zeiger auf die entsprechenden Stellen wo das Objekt im Speicher liegt. Dass sollte so oder so nicht das Problem von globalen Variablen sein. Funktionieren tuts auch. Aber das Problem ist wenn irgendwo mal eine dieser Variablen überschrieben wird wars das. Und bis du solche Fehler findest kann es teilweise etwas länger dauern ... musst ich selbst mal am eigenen Leib erfahren als ich ein bestehendes System etwas erweitern sollte und es globale Variablen gab die ich allerdings nicht kannte da diese nirgendwo dokumentiert waren. Eine Möglichkeit wäre das Factory Pattern. Bedeutet du hast eine Klasse die als Singleton fungiert und die ganzen "globalen" Variablen beinhaltet. Das bedeutet diese Klasse ist statisch, es kann also immer nur das zuerst initialisierte Objekt aufgerufen werden. In diesem Objekt speicherst du jetzt die anderen Objekte, also DB, Smarty, Mail etc. Wenn du jetzt in irgend einer Klasse eine andere Aufrufen möchtest kannst du das so z.B. lösen: PHP-Code:
__________________ Wenn ich du wäre, wäre ich lieber ich. http://www.clubstars.net http://www.x-tinct.de |
| | |
| | Nach oben #4 |
| Johannes Schlichenmaier Registriert seit: 26.08.2005 Ort: Mannheim
Beiträge: 403
|
Falls dich eine zweite Meinung interessiert: Ich versuche ebenfalls globale Variablen wenn möglich zu meiden (aus o.g. Gründen und aus Sauberkeit) und benutze lieber Singleton. Übrigens kann man mit Singleton, get und set ganze nette Config-Klassen erstellen, bei denen Konfigurationsklassen rauskommen, mit denen man dann wie folgt auf einzelne Werte zugreifen kann: PHP-Code:
__________________ In the beginning was the word and the word was content-type: plain/text heute code ich, morgen debug ich und uebermorgen cast ich die koenigin auf int |
| | |
| | Nach oben #5 | |
| Benutzer Registriert seit: 22.11.2006 Ort: Haan
Beiträge: 50
| Zitat:
Danke für deine Antwort Gruß nox | |
| | |
| | Nach oben #6 | |
| Johannes Schlichenmaier Registriert seit: 26.08.2005 Ort: Mannheim
Beiträge: 403
| Zitat:
d.h. man kann bspw. in Teil A eines Scriptes in der Instanz einen Wert speichern und in Teil B diesen Wert wieder auslesen. Eine Mini-Singelton-Klasse ist beispielsweise diese hier: PHP-Code: Mit dieser Klasse kann man damit dann z.B. folgendes machen: PHP-Code: Code: muhaha Ich kanns grad nicht testen, bei funktioniert irgendwie grad kein Suchbutton...
__________________ In the beginning was the word and the word was content-type: plain/text heute code ich, morgen debug ich und uebermorgen cast ich die koenigin auf int Geändert von Jojo (01.08.2008 um 13:40 Uhr) Grund: Dumme Fehler in getInstance ausgemerzt und Member $wert das static weggenommen... | |
| | |
| | Nach oben #7 |
| Jann Hendrik Bekaan Registriert seit: 02.12.2004 Ort: Wildeshausen
Beiträge: 2.374
| Nein, haben wir leider nicht - ich nehme aber gerne dazu eines an! Einfach schreiben und im Tutorial-Briefkasten posten.
__________________ Umfragen: Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Danke! |
| | |
| | Nach oben #8 |
| Bastian Fenske Registriert seit: 04.01.2006 Ort: Kassel
Beiträge: 853
|
Singletons sind letztlich nichts anderes, als globale Variablen und von daher geht das hier vielleicht ein wenig am Thema vorbei, denn die Vor- und Nachteile sind die selben. Zentraler Nachteil von Globalen ist, dass dein Stückchen Code, also deine Klasse oder Funktion damit eine Schnittstelle zu einem anderen Teil deines Codes hat, der nicht so ganz transparent ist. Wenn du die benötigten Objekte den Funktionen oder dem Konstruktor übergibst, dann tunnelst du quasi alle Abhängigkeiten (mehr oder weniger) und hast nicht noch irgendwelche Fehlerquellen rumschwirren, die von einem irgendwie undurchsichtigen Zustand deiner Anwendung abhängig sind. Ich würde mir also sehr genau anschauen, welche Objekte wirklich von allen Klassen benötigt werden bzw. ob sich diese nicht besser über Fabriken übergeben lassen (die dann die Objekte kennen und den zu bauenden Objekten übergeben können, ohne dass die Klienten dieser Objekte etwas damit zu tun haben müssen). Bastian |
| | |
![]() |
| Lesezeichen |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | Thema durchsuchen |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| php variable in JS anzeigen | Galge | JavaScript und AJAX | 9 | 28.03.2007 14:44 |
| [Smarty] Variable in variable aus Konfigurationsdatei umwandeln? | thrawn | PEAR, PECL und Frameworks | 9 | 20.07.2006 11:52 |
| [Realisierung] [Brainstroming] Variable Wertanzahl | Du-weisst-schon-wer | Datenbanken | 5 | 08.01.2006 20:41 |
| Probleme mit Variable in SQL Anweisung | Doggi | Datenbanken | 10 | 15.12.2005 14:04 |
| Variablennamen mit Variable. | Creativ | PHP-Programmierung | 9 | 30.11.2005 08:40 |