phpbar.de logo

Mailinglisten-Archive

[php] Singleton in mehrfach extendeten Klassen inkl. autoload...

[php] Singleton in mehrfach extendeten Klassen inkl. autoload...

Jens Reinemuth jens at reinemuth.info
Mi Mai 19 17:20:33 CEST 2010


Hallo allesamt,

stehe hier grad tooootal auf dem Schlauch.

Ich habe eine Basis-Klasse namens "openWebX", welche alle
magic-Functions beinhaltet, um z.B. bei __get eine Exception zu
schmeissen o.ä.

Nun habe ich da auch versucht eine Singleton-Funktion zu bauen, a la:

class openWebX {

    public static $instances = array();

    private function __construct() {
    }
   
    static function init($strObject,$mixedParams='') {
        if(!in_array($strObject, self::$instances)) {
            echo 'init new instance of '.$strObject.'<br/>';
            self::$instances[$strObject] = new $strObject($mixedParams);
        }
        return self::$instances[$strObject];
    }
.
.
.
}


Vielleicht problematisch (?): ich nutze auch eine __autoload function:

function __autoload($strLibName) {
    $loadLib =
Settings::get('path_lib').$strLibFolder.'/'.$strLibName.'.php';
    require_once($loadLib);
}


Ich definiere nun eine Klasse

class openLib extends openWebX {
 /* common lib-functions */
}

und finally dann

class openDB extends openLib {

}

Wenn ich nun in einem File sowas mache:

$myDB = openWebX::init('openDB');
$myDB2 = openWebX::init('openDB');
$myDB3 = openWebX::init('openDB');
$myDB4 = openWebX::init('openDB');
$myDB5 = openWebX::init('openDB');

Kommt die Ausgabe:

init new instance of openDB
init new instance of openDB
init new instance of openDB
init new instance of openDB
init new instance of openDB

Vielleicht kann mir jemand den Schlauch unter den Füßen entfernen...

Danke,

Jens


php::bar PHP Wiki   -   Listenarchive