Initial support for Closure::bind outside of repo mode
[hiphop-php.git] / hphp / test / slow / closure / bind-stress.php
blobaa35eaf4ba90a268c7b053a3aae2bc2f5b31b7fe
1 <?
3 #error_reporting(E_NONE);
5 class Foo {
6 private static $foo = "I'm a foo";
7 private $myFoo = "I'm a foo instance";
9 private function instanceDo() { return 'Foo::instanceDo'; }
10 private static function staticDo() { return 'Foo::staticDo'; }
12 function getClosure() {
13 return function () {
14 if (!isset($this)) {
15 echo "No \$this\n";
16 return;
19 if (isset($this->myFoo)) {
20 echo '$this->myFoo = ';
21 var_dump($this->myFoo);
24 if (isset(static::$foo)) {
25 echo 'static::$foo = ';
26 var_dump(static::$foo);
29 if (isset(self::$foo)) {
30 echo 'self::$foo = ';
31 var_dump(self::$foo);
34 if (method_exists($this, 'staticDo')) {
35 echo 'static::staticDo() = ';
36 var_dump(static::staticDo());
39 if (method_exists($this, 'instanceDo')) {
40 echo '$this->instanceDo() = ';
41 var_dump($this->instanceDo());
46 static function getStaticClosure() {
47 return static function () {
48 if (isset(static::$foo)) {
49 echo 'static::$foo = ';
50 var_dump(static::$foo);
53 if (isset(self::$foo)) {
54 echo 'self::$foo = ';
55 var_dump(self::$foo);
58 if (method_exists(get_called_class(), 'staticDo')) {
59 echo 'static::staticDo() = ';
60 var_dump(static::staticDo());
66 class Bar {
67 private static $foo = "I'm a bar";
68 private $myFoo = "I'm a bar instance";
70 private function instanceDo() { return 'Bar::instanceDo'; }
71 private function staticDo() { return 'Bar::staticDo'; }
74 class Baz {}
76 $foo = new Foo;
77 $bar = new Bar;
78 $baz = new Baz;
80 $staticCl = Foo::getStaticClosure();
81 $Cl = $foo->getClosure();
83 echo "================================================================\n";
84 echo "\$staticCl()\n";
85 @$staticCl();
86 echo "\$Cl()\n";
87 @$Cl();
90 echo "================================================================\n";
91 echo "\$s1 = \$staticCl->bindTo(NULL, 'Bar')\n";
92 $s1 = $staticCl->bindTo(NULL, 'Bar');
93 @$s1();
94 echo "\$s2 = \$Cl->bindTo(\$bar, 'Bar')\n";
95 $s2 = $Cl->bindTo($bar, 'Bar');
96 @$s2();
99 echo "================================================================\n";
100 echo "\$s1 = \$staticCl->bindTo(NULL, 'Baz')\n";
101 $s1 = $staticCl->bindTo(NULL, 'Baz');
102 $s1();
103 echo "\$s2 = \$Cl->bindTo(\$baz, 'Baz')\n";
104 $s2 = $Cl->bindTo($baz, 'Baz');
105 $s2();
108 echo "================================================================\n";
109 echo "\$s2 = \$Cl->bindTo(\$baz, 'Bar')\n";
110 $s2 = $Cl->bindTo($baz, 'Bar');
111 $s2();
114 echo "================================================================\n";
115 echo "\$s2 = \$Cl->bindTo(\$foo, 'Baz')\n";
116 $s2 = $Cl->bindTo($foo, 'Baz');
117 $s2();