PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   PHP Entwicklung und Softwaredesign (http://www.selfphp.de/forum/forumdisplay.php?f=14)
-   -   Singelton oder $GLOBALS (http://www.selfphp.de/forum/showthread.php?t=20600)

CharelB 11.12.2008 18:53:04

Singelton oder $GLOBALS
 
Hi Community ,


Ich wollte mich fragen in php5 was eigentlich besser ist .... eine Singelton Klasse ... oder meine Klassen via $GLOBALS aufzurufen .... wenn ja warum ... was sind die vor und nachteile?


Kind regards - Charel B

DokuLeseHemmung 11.12.2008 20:39:43

AW: Singelton oder $GLOBALS
 
Erschießen == Singleton
Erstechen == Globale Variablen
Was ist besser?
Mir wäre Erschießen lieber!
(obwohl, so ganz sicher bin ich mir da auch nicht)

Meist gibt es Alternativen.
Was willst du wirklich erreichen?

CharelB 11.12.2008 20:46:11

AW: Singelton oder $GLOBALS
 
mir wurde im IRC geraten dies zu tun also entweder $GLOBALS oder Singelton's zu benutzen.


weil ich hab mir z.b in database.php ne klasse geschrieben namens "database" ... diese hab ich wiederum in der selben datei schon gestartet per

PHP-Code:

...

$database=new database();

... 

so hab ich das auch bei anderen klassen gemacht was nur komisch war nadem ich die datei included hatte ...

per

PHP-Code:

...

@include(
'database.php'); 

wollte ich auf die funktion "doConnect" zugreifen um eine verbindung zum datenbanken server zu bekommen

aber komischerweise bekam ich einen error dass er die funktion nicht kannte ... so hab ich mich ein wenig umgegooglet und im irc nach gefragt ... diese sagten mir wiederum ich solle $GLOBALS oder Singelton's benutzen


Wenn jemand nen anderen vorschlag hat kann mir ja hier antworten oder ne pm schicken

Kind regards- CharelB

DokuLeseHemmung 11.12.2008 20:56:26

AW: Singelton oder $GLOBALS
 
Lass es dir gesagt sein:
Irgendwann brauchst du eine Verbindung zu einer 2ten Datenbank!
Und dann fällst du mit Globals/Singletons auf die Nase.


Wenn es irgend möglich ist, übergib den Klassen, welche eine DB Verbindung brauchen, die Verbindungsklasse im Konstruktor, oder per Setter Methode.

Für dich könnten folgende Pattern von Interesse sein:
Factory
Registry
Dependency Injection
Oder eine Kombination aus diesen, welche dann evtl Singleton sein darf. Aber längst nicht muß.

Tipp:
Ein Singleton im Projekt bringt Sorgen aber mehrere davon ist softwaretechnischer Selbstmord auf Raten.

CharelB 11.12.2008 21:13:59

AW: Singelton oder $GLOBALS
 
wo finde ich diese patterns?


Kind regards Charel B

DokuLeseHemmung 11.12.2008 21:45:56

AW: Singelton oder $GLOBALS
 
http://de.wikipedia.org/wiki/Entwurfsmuster
Und über google z.B:
[google]Dependency Injection Design Pattern PHP[/google]

cortex 12.12.2008 00:36:25

AW: Singelton oder $GLOBALS
 
Zitat:

Zitat von CharelB (Beitrag 122724)
mir wurde im IRC geraten [...] $GLOBALS

die ratschläge dieser person wurde ich in zukunft sehr kritisch betrachten. globale variablen, noch dazu für ein vergleichsweise triviales problem, sind ein grosses tabu in der programmierung.

Zitat:

Zitat von CharelB (Beitrag 122724)
PHP-Code:

@include('database.php'); 


fehler solltest du besser durch skript-logik abfangen, nicht durch das voranstellen von '@':

- frisst performance en masse
- sehr schlechter stil

cx

Morrandir 04.01.2009 16:27:57

AW: Singelton oder $GLOBALS
 
Ich würde generell in der database.php keine Instanz erzeugen sondern nur die Klassenstruktur ablegen. Warum? => Weil ich sonst vielleicht 20 includes in ner Datei stehen hab, aber jedesmal in die einzelnen Dateien reinschaun muss, wo ich wieviele und welche Instanzen schon erzeugt hab.

+Puls: ich würde require_once verwenden, wenn ich irgendwo eine Klassenstruktur einbinde - da bei wiederholtem include ein Fehler (Redefinition) auftritt!

+Plus: Singelton würde ich generell vergessen!
+Plus: $GLOBALS sind (meiner Meinung nach - und vieler anderer nach) schrott!

+Plus: Eine Datenbankklasse mit Datenbankparametern im Konstruktor (wie sie DokuLeseHemmung beschrieben hat) ist wesentlich besser zu handhaben!

Gruß
Andi


Alle Zeitangaben in WEZ +2. Es ist jetzt 05:50:24 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.