Annotation of embedaddon/php/Zend/tests/lsb_018.phpt, revision 1.1

1.1     ! misho       1: --TEST--
        !             2: ZE2 Late Static Binding and Singleton
        !             3: --FILE--
        !             4: <?php
        !             5: abstract class Singleton
        !             6: {
        !             7:        static private $instances = array();
        !             8:        static private $nextInstanceId = 0;
        !             9:        private $instanceId = NULL;
        !            10:        static final public function getInstance()
        !            11:        {
        !            12:                $caller = get_called_class();
        !            13:                if (!isset(self::$instances[$caller])) {
        !            14:                        self::$instances[$caller] = new $caller;
        !            15:                        self::$instances[$caller]->instanceId = self::$nextInstanceId++;
        !            16:                }
        !            17:                return self::$instances[$caller];
        !            18:        }
        !            19:        public final function getInstanceId()
        !            20:        {
        !            21:                return $this->instanceId;
        !            22:        }
        !            23:        public final function identify()
        !            24:        {
        !            25:                var_dump($this);
        !            26:        }
        !            27: }
        !            28: 
        !            29: class Foo extends Singleton {
        !            30: }
        !            31: 
        !            32: class Bar extends Singleton {
        !            33: }
        !            34: 
        !            35: class Baz extends Bar {
        !            36: }
        !            37: 
        !            38: $u = Foo::getInstance();
        !            39: $v = Bar::getInstance();
        !            40: $w = Baz::getInstance();
        !            41: 
        !            42: $u->identify();
        !            43: $v->identify();
        !            44: $w->identify();
        !            45: 
        !            46: $x = Foo::getInstance();
        !            47: $y = Bar::getInstance();
        !            48: $z = Baz::getInstance();
        !            49: 
        !            50: $u->identify();
        !            51: $v->identify();
        !            52: $w->identify();
        !            53: $x->identify();
        !            54: $y->identify();
        !            55: $z->identify();
        !            56: ?>
        !            57: ===DONE===
        !            58: --EXPECTF--
        !            59: object(Foo)#%d (1) {
        !            60:   ["instanceId":"Singleton":private]=>
        !            61:   int(0)
        !            62: }
        !            63: object(Bar)#%d (1) {
        !            64:   ["instanceId":"Singleton":private]=>
        !            65:   int(1)
        !            66: }
        !            67: object(Baz)#%d (1) {
        !            68:   ["instanceId":"Singleton":private]=>
        !            69:   int(2)
        !            70: }
        !            71: object(Foo)#%d (1) {
        !            72:   ["instanceId":"Singleton":private]=>
        !            73:   int(0)
        !            74: }
        !            75: object(Bar)#%d (1) {
        !            76:   ["instanceId":"Singleton":private]=>
        !            77:   int(1)
        !            78: }
        !            79: object(Baz)#%d (1) {
        !            80:   ["instanceId":"Singleton":private]=>
        !            81:   int(2)
        !            82: }
        !            83: object(Foo)#%d (1) {
        !            84:   ["instanceId":"Singleton":private]=>
        !            85:   int(0)
        !            86: }
        !            87: object(Bar)#%d (1) {
        !            88:   ["instanceId":"Singleton":private]=>
        !            89:   int(1)
        !            90: }
        !            91: object(Baz)#%d (1) {
        !            92:   ["instanceId":"Singleton":private]=>
        !            93:   int(2)
        !            94: }
        !            95: ===DONE===

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>