phpbar.de logo

Mailinglisten-Archive

[php] Singleton

[php] Singleton

Andreas Heigl a.heigl at wdv.de
Die Mai 23 10:41:56 CEST 2006


Hallo Liste

Ich bin gerade dabei eine Anwendung auf PHP5 zu portieren.

Dabei stehe ich vor folgendem Problem:

Ich habe eine Basisklasse [A] und eine abgeleitete Klasse [B].

In der Klasse [C] wird jetzt versucht eine Instanz der Klasse [B] über ein
Singleton-Pattern, welches in Klasse [A] definierte ist, zu erzeugen.

Das funktioniert aber nicht, da ich bisher keine Möglichkeit gefunden habe,
in Klasse [A] den Klassen-Namen der Klasse [B] zu ermitteln.

[A]

class A
{
    function singleton ()

    {
       $className = get_class ();
        // Funktioniert nicht, da dann [A] instantiiert wird und nicht [B]
        $className = get_class ( $self );
        // Funktioniert nicht, da $self in einer statischen Funtion nicht
        // definiert ist
        $foo = debug_backtrace ();
        $className = $foo [ 0 ][ 'class' ];
        // Idee von 'michael at digitalgnosis dot removethis dot com' aus
        // http://de2.php.net/manual/de/language.oop5.static.php
        // functioniert nicht, da $foo [ 0 ][ 'class' ] == 'A'
        $className = $foo [ 1 ][ 'class' ];
        // Funktioniert nicht, da $foo [ 1 ][ 'class' ] == 'C'
        $className = __CLASS__;
        // Funktioniert nicht, da __CLASS__ == 'A'
        if ( ( ! array_key_exists ( 'g' . $className, $GLOBALS ) ) ||
             ( ! is_object ( $GLOBALS [ 'g' . $className ] ) ) ||
             ( ! is_a ( $clasName, $GLOBALS [ 'g' . $className ] ) ) )

        {
            $GLOBALS [ 'g' . $className ] = new $className ();
        }
        return $GLOBALS [ 'g' . $className ];
}

[B]

class B extends A
{
    //
}

[C]

class C
{
    $foo = B :: singleton ();
}

Wer kann mich mal vom Schlauch schubsen?

Danke schonmal 

Andreas 

-- 

Andreas Heigl
Siemensstrasse 6
61352 Bad Homburg
Germany
Telefon +49-(0)6172-670-185
Telefax +49-(0)6172-670-181



php::bar PHP Wiki   -   Listenarchive