[php] Singleton / rejestr

0

Dzisiaj caly dzien siedze i nie moge zrozumiec jednej rzeczy... dla mnie jest wszystko ok a mimo to dostaje kosmiczne wyniki.

Chcialem napisac klase rejestru ktora bylaby Singletonem. Ale za nic nie rozumiem dlaczego nie dziala... korzystam niby z php5. Moze cos z moim php jest nie tak?

Napisalem taki kod:

class Singleton {
    static private $instance = NULL;
	private $vars = array();
	
	// funckja dodaje zmienna do rejestru
	public function __set($index, $value) {
		$this->vars[$index] = $value;
	}
	
	// funkcja zwraca zmienna z rejestru 
	public function __get($index) {
		return $this->vars[$index];
	}
	
    private function __construct() {
    }

    static public function getInstance() {
        if (self::$instance == NULL) {
            self::$instance = new Singleton();
        }
        return self::$instance;
    }
}

$Singleton = Singleton::getInstance();
$Singleton->cos= 4;
$Singleton2 = Singleton::getInstance();
echo $Singleton2->cos.' // powinno byc 4<br />';
echo $Singleton2->cos= 6;
echo $Singleton->cos.' // powinno byc 6<br />';

I ku zdziwieniu otrzymuje taki wynik:

4 // powinno byc 4
66 // powinno byc 6

Dlacze 66 a nie 6?
Paranoja.

Oczekiwalem wyniuku:

4 // powinno byc 4
6 // powinno byc 6

Pozdrawiam wszystkich i z gory dziekuje za odpowiedzi.

0

Odpowiedź jest bardzo prosta, pewnie już sam do tego doszedłeś. Po prostu masz o 1 echo za dużo.

<?
class Singleton {
    static private $instance = NULL;
        private $vars = array();
       
        // funckja dodaje zmienna do rejestru
        public function __set($index, $value) {
                $this->vars[$index] = $value;
        }
       
        // funkcja zwraca zmienna z rejestru
        public function __get($index) {
                return $this->vars[$index];
        }
       
    private function __construct() {
    }

    static public function getInstance() {
        if (self::$instance == NULL) {
            self::$instance = new Singleton();
        }
        return self::$instance;
    }
}

$Singleton = Singleton::getInstance();
$Singleton->cos= 4;
$Singleton2 = Singleton::getInstance();
echo $Singleton2->cos.' // powinno byc 4<br />';
$Singleton2->cos= 6;
echo $Singleton->cos.' // powinno byc 6<br />';
?>
0

O kurcze... dzieki..
Taki literowki sa najgorsze ;)
Jeszcze raz dzieki :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1