]> granicus.if.org Git - php/commitdiff
- Add another LSB test
authorMarcus Boerger <helly@php.net>
Fri, 23 Nov 2007 13:25:35 +0000 (13:25 +0000)
committerMarcus Boerger <helly@php.net>
Fri, 23 Nov 2007 13:25:35 +0000 (13:25 +0000)
Zend/tests/lsb_018.phpt [new file with mode: 0755]

diff --git a/Zend/tests/lsb_018.phpt b/Zend/tests/lsb_018.phpt
new file mode 100755 (executable)
index 0000000..5a678d1
--- /dev/null
@@ -0,0 +1,95 @@
+--TEST--
+ZE2 Late Static Binding and Singleton
+--FILE--
+<?php
+abstract class Singleton
+{
+       static private $instances = array();
+       static private $nextInstanceId = 0;
+       private $instanceId = NULL;
+       static final public function getInstance()
+       {
+               $caller = get_called_class();
+               if (!isset(self::$instances[$caller])) {
+                       self::$instances[$caller] = new $caller;
+                       self::$instances[$caller]->instanceId = self::$nextInstanceId++;
+               }
+               return self::$instances[$caller];
+       }
+       public final function getInstanceId()
+       {
+               return $this->instanceId;
+       }
+       public final function identify()
+       {
+               var_dump($this);
+       }
+}
+
+class Foo extends Singleton {
+}
+
+class Bar extends Singleton {
+}
+
+class Baz extends Bar {
+}
+
+$u = Foo::getInstance();
+$v = Bar::getInstance();
+$w = Baz::getInstance();
+
+$u->identify();
+$v->identify();
+$w->identify();
+
+$x = Foo::getInstance();
+$y = Bar::getInstance();
+$z = Baz::getInstance();
+
+$u->identify();
+$v->identify();
+$w->identify();
+$x->identify();
+$y->identify();
+$z->identify();
+?>
+===DONE===
+--EXPECTF--
+object(Foo)#%d (1) {
+  ["instanceId":"Singleton":private]=>
+  int(0)
+}
+object(Bar)#%d (1) {
+  ["instanceId":"Singleton":private]=>
+  int(1)
+}
+object(Baz)#%d (1) {
+  ["instanceId":"Singleton":private]=>
+  int(2)
+}
+object(Foo)#%d (1) {
+  ["instanceId":"Singleton":private]=>
+  int(0)
+}
+object(Bar)#%d (1) {
+  ["instanceId":"Singleton":private]=>
+  int(1)
+}
+object(Baz)#%d (1) {
+  ["instanceId":"Singleton":private]=>
+  int(2)
+}
+object(Foo)#%d (1) {
+  ["instanceId":"Singleton":private]=>
+  int(0)
+}
+object(Bar)#%d (1) {
+  ["instanceId":"Singleton":private]=>
+  int(1)
+}
+object(Baz)#%d (1) {
+  ["instanceId":"Singleton":private]=>
+  int(2)
+}
+===DONE===