Mailinglisten-Archive |
Hallo zusammen, Ich möchte in einem Projekt genau eine Instanz einer Klasse zur Laufzeit haben. Dazu bietet sich ja das Singletonpattern an. Leider funzt es bei mir z.Z nicht wie erwartet. Wenn ich die Klasse instanzier werden leider keine Änderungen am Objekt die zur Laufzeit anfallen in dem Objekt gespeichert. Die Implementierung der Singletonklasse ist aus dem Artikel im PHP Magazin ( Entwurfsmuster in PHP - Teil 1) übernommen. Hier mal ein bisschen Code der das Problem verdeutlicht.... <code> class Singleton { var $_instances = array(); function instance($class) { if (!isset($this->_instances[$class]) || !is_object($this->_instances[$class])) { $this->_instances[$class] = new $class(); } $pointer =& $this->_instances[$class]; return $pointer; } } function &singleton($class) { static $singleton; if (!is_object($singleton)) { $singleton = new Singleton(); } $instance = $singleton->instance($class); return $instance; } class Foo { var $count = 0; function getCount() { $this->count++; return $this->count; } } $obj = singleton('Foo'); echo "Erster Aufruf erwartet 1, Ergebniss = ".$obj->getCount()."<br>"; $obj2 = singleton('Foo'); echo "Zweiter Aufruf erwartet 2, Ergebniss = ".$obj2->getCount()."<br>"; </code> <ausgabe> Erster Aufruf erwartet 1, Ergebniss = 1 Zweiter Aufruf erwartet 2, Ergebniss = 1 </ausgabe> Hab ich hier ein grundsätzlichen Denkfehler oder warum wird bei beim zweiten Aufruf von getCount() wieder 1 ausgegeben? Vielen Dank Ps: System is LAMP PHP 4.3.10 -- Maik Ryssel
php::bar PHP Wiki - Listenarchive