PHP Klassen instanzieren

Hallo Leute
Ich programmiere seit kurzer Zeit OOP (zumindest denke ich das).

Nun kommt in meinen Programmen ziemlich häufig der zugriff auf andere klassen vor. Ich benutze recht oft das Singlton Pattern (hab auch noch keinen grund gefunden warum ich das nicht machen sollte) und nun kommt ziemlich häufig so etwas vor:

$sNickname = User::getInstance()->getNickname( $iUserId );

Meine Frage ist nun, ist das normal oder aber hab ich irgendwo ein Gedankenfehler oder aber könnte ich durch dieses Instancieren später Probleme bekommen? Da ich dies in vielen meiner Klassen, die sich auf z.B. die Userklasse beziehen habe.

Gruß Lamer

Moin moin!

Hallo Leute
Ich programmiere seit kurzer Zeit OOP (zumindest denke ich
das).

Nun kommt in meinen Programmen ziemlich häufig der zugriff auf
andere klassen vor. Ich benutze recht oft das Singlton Pattern
(hab auch noch keinen grund gefunden warum ich das nicht
machen sollte) und nun kommt ziemlich häufig so etwas vor:

Nunja, ob Singleton sinnvoll ist oder nicht hängt vollkommen vom Anwendungsfall ab. In vielen Fällen ist Singleton jedoch das beste Mittel der Wahl.

$sNickname = User::getInstance()->getNickname( $iUserId );

Meine Frage ist nun, ist das normal oder aber hab ich irgendwo
ein Gedankenfehler oder aber könnte ich durch dieses
Instancieren später Probleme bekommen? Da ich dies in vielen
meiner Klassen, die sich auf z.B. die Userklasse beziehen
habe.

Gruß Lamer

Grundsätzlich sollte es - so es korrekt programmiert wurde - nie mehr als eine Instanz der Klasse User geben. Ergo: Es sollte zu keinen Problemen kommen.
Du solltest aber schauen, ob es manchmal sinnvoller wäre erstmal eine Variable mit der aktuellen Instanz zu belegen, wenn du die Instanz im entsprechenden Gültigkeitsbereich mehrfach brauchst. Grund hierfür ist, dass jeder Methodenaufruf Rechenzeit in Anspruch nimmt. Sprich: Wenn du nur für diesen einen Zweck auf die Instanz der Klasse User zugreifen musst, ist das so vollkommen ausreichend. Hast du jedoch mehrere Dinge, die du mit der Klasse nutzen willst, sollte es statt so:

User::getInstance ()->Methode1();
User::getInstance ()->Methode2();
User::getInstance ()->Methode3();

besser so aussehen:

$oUser = User::getInstance ();
$oUser->Methode1();
$oUser->Methode2();
$oUser->Methode3();
unset ($oUser);

Damit umgehst du in diesem Beispiel 2 Methodenaufrufe.

MfG
Lutz

Danke … genau so hab ich es mir gedacht … aber lieber bestätigen lassen als später alles ändern zu müssen :smile:

thanks :smile:Lamer