~ubuntu-branches/ubuntu/quantal/php5/quantal

« back to all changes in this revision

Viewing changes to Zend/tests/lsb_018.phpt

  • Committer: Bazaar Package Importer
  • Author(s): Sean Finney
  • Date: 2009-07-01 09:12:10 UTC
  • mto: (0.9.1) (1.1.17 upstream)
  • mto: This revision was merged to the branch mainline in revision 58.
  • Revision ID: james.westby@ubuntu.com-20090701091210-go0h6506p62on17r
Tags: upstream-5.3.0
ImportĀ upstreamĀ versionĀ 5.3.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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===