[php] Singleton / rejestr

Odpowiedz Nowy wątek
2009-07-25 01:11
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.

Pozostało 580 znaków

2009-07-25 03:23
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 />';
?>

Pozostało 580 znaków

2009-07-25 09:52
0

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

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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