phpbar.de logo

Mailinglisten-Archive

[php] Singleton

[php] Singleton

Maik Ryssel maik at laubegaster.de
Fre Feb 10 12:41:51 CET 2006


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