Mailinglisten-Archive |
Am Montag, den 18.04.2005, 17:28 +0200 schrieb Christian Thiele:
> Jonas Schneider schrieb:
> >> Ich möchte das für ein globales Datenbank-Objekt (mit PEAR::DB)
> >> verwenden, so dass alle Funktionen auf dieses
>
> Selbst sowas wie $_GET zu erstellen geht nicht, aber für deinen Zweck bietet
> sich ein Singleton-Pattern an (einfach mal googln). Damit bewirkst du, das
> immer auf dein Objekt zugegriffen wird, welches du einmal instanziiert hast.
>
> $db = getDBHandle();
>
> Function getDBHandle()
> {
> Static $db;
> if(!$db)
> {
> $db = new DB;
> }
> return $db;
> }
Ich habe es früher auch so gemacht und musste feststellen, dass, wenn
eine Ressource öfter eingebunden wird (include), in welcher ein
Singleton aufgerufen wird, die Instanz dort immer wieder gebildet wird.
Ein Ausweg war:
class A
{
function &singleton( )
{
if ( ! isset ( $GLOBALS[ __FILE__ ] )
OR ! is_object( $GLOBALS[ __FILE__ ] ) )
{
$GLOBALS[ __FILE__ ] =& new A( );
}
return $GLOBALS[ __FILE__ ];
}
function A( )
{
}
}
Das nur als Tipp, wenn man ganz sicher gehen will, dass man mit nur
einer Instanz arbeitet.
--
Mit freundlichem Gruß
Martin Rozmus
Tel.: +49 (0)551 4885944
Mobil.: 0177 7475196
Email: martin.rozmus at gmx.net
PGP: http://pgp.mit.edu:11371/pks/lookup?op=get&search=0x0B13366C
php::bar PHP Wiki - Listenarchive