Session-Singleton funktioniert nicht mit Include-Datei
Session-Singleton funktioniert nicht mit Include-Datei
am 07.12.2007 17:37:30 von Roland Smiderkal
Dank Thomas Hamachers Anregung (Message-ID:
) hab ich mir ein
"Session-Singleton" gebaut:
session_name('TESTSESSID');
session_start();
class MyClass
{
private function __construct() { }
static public function getInstance()
{
if (! is_object($_SESSION['MyClass_Instance'])) {
echo 'Creating new object!
';
$_SESSION['MyClass_Instance'] = new MyClass;
}
else {
echo 'Reusing existing object!
';
}
return $_SESSION['MyClass_Instance'];
}
public function showmsg($msg) { echo "$msg
"; }
}
?>
$obj1 = MyClass::getInstance();
$obj1->showmsg("Hello");
?>
Dieser Code funktioniert wie gewünscht. Beim ersten Aufruf kommt die
Ausgabe 'Creating new object!', bei allen folgenden: 'Reusing existing
object!'.
Wenn ich jedoch die Klassendefinition von MyClass in eine externe
Datei verschiebe und diese mit require() oder include() einbinde, wird
*immer* eine neue Instanz erzeugt. ('Creating new object!').
Wo liegt hier mein Denkfehler?
Roland
Re: Session-Singleton funktioniert nicht mit Include-Datei
am 07.12.2007 18:50:23 von Christoph Bersch
Roland Smiderkal wrote:
> Dank Thomas Hamachers Anregung (Message-ID:
> ) hab ich mir ein
> "Session-Singleton" gebaut:
>
[CODE]
> Dieser Code funktioniert wie gewünscht. Beim ersten Aufruf kommt die
> Ausgabe 'Creating new object!', bei allen folgenden: 'Reusing existing
> object!'.
>
> Wenn ich jedoch die Klassendefinition von MyClass in eine externe
> Datei verschiebe und diese mit require() oder include() einbinde, wird
> *immer* eine neue Instanz erzeugt. ('Creating new object!').
>
> Wo liegt hier mein Denkfehler?
Meine Glaskugel sagt mir, dass du die Klassendefinition von 'MyClass'
vor Starten der Session einbinden musst:
require_once "session-singleton.inc.php";
session_start();
?>
Frohes Schaffen,
Christoph
Re: Session-Singleton funktioniert nicht mit Include-Datei
am 07.12.2007 20:09:56 von Roland Smiderkal
Christoph Bersch schrieb:
>Meine Glaskugel sagt mir, dass du die Klassendefinition von 'MyClass'
>vor Starten der Session einbinden musst:
>
>
>require_once "session-singleton.inc.php";
>session_start();
>?>
Deine Glaskugel hat recht! Trotzdem ist mir nicht klar, warum dann das
folgende funktioniert:
session_start();
class SessionSingleton { /* [...] */ };
?>
Roland
Re: Session-Singleton funktioniert nicht mit Include-Datei
am 07.12.2007 20:45:53 von Michael Fesser
..oO(Roland Smiderkal)
>Christoph Bersch schrieb:
>>Meine Glaskugel sagt mir, dass du die Klassendefinition von 'MyClass'
>>vor Starten der Session einbinden musst:
>>
>>
>>require_once "session-singleton.inc.php";
>>session_start();
>>?>
>
>Deine Glaskugel hat recht! Trotzdem ist mir nicht klar, warum dann das
>folgende funktioniert:
>
>
> session_start();
> class SessionSingleton { /* [...] */ };
> ?>
Der Code wird geladen, compiliert, ausgeführt. Steht die Klassen-
definition in derselben Datei, dann funktioniert das natürlich.
Wird die Klasse aber per 'require' aus einer externen Datei eingebunden,
kann es das beobachtete Problem geben, da 'require' erst zur Laufzeit
ausgeführt wird.
Micha
Re: Session-Singleton funktioniert nicht mit Include-Datei
am 07.12.2007 22:37:49 von Roland Smiderkal
Michael Fesser schrieb:
>Wird die Klasse aber per 'require' aus einer externen Datei eingebunden,
>kann es das beobachtete Problem geben, da 'require' erst zur Laufzeit
>ausgeführt wird.
Die Frage, ob man in PHP eine Datei zur Kompilierungszeit (wie mit
'use' in Perl) einbinden kann, kann ich mir dann wohl sparen.
Danke für alle Antworten
Roland