source: src/router/php7/Zend/tests/closures/closure_from_callable.inc @ 31874

Last change on this file since 31874 was 31874, checked in by brainslayer, 5 weeks ago

update php

File size: 3.1 KB
Line 
1<?php
2
3function bar($param1)
4{
5        return $param1;
6}
7
8
9$closure = function($param1) {
10        return $param1;
11};
12
13function test($fn)
14{
15        static $count = 0;
16        $input = "foo".$count;
17        $count++;
18
19        $output = $fn($input);
20        return $input === $output;
21}
22
23class Foo
24{
25        public static function publicStaticFunction($param1)
26        {
27                return $param1;
28        }
29       
30        private static function privateStaticFunction($param1)
31        {
32                return $param1;
33        }
34
35        protected static function protectedStaticFunction($param1)
36        {
37                return $param1;
38        }
39
40        private function privateInstanceFunc($param1)
41        {
42                return $param1;
43        }
44       
45        protected function protectedInstanceFunc($param1)
46        {
47                return $param1;
48        }
49       
50       
51        public function publicInstanceFunc($param1)
52        {
53                return $param1;
54        }
55       
56        public function closePrivateValid()
57        {
58                return Closure::fromCallable([$this, 'privateInstanceFunc']);
59        }
60
61        public function closePrivateStatic()
62        {
63                return Closure::fromCallable([__CLASS__, 'privateStaticFunction']);
64        }
65
66        public function bar($param1)
67        {
68                echo "this is bar\n";
69        }
70
71        public function getCallable()
72        {
73                return Closure::fromCallable([$this, 'publicInstanceFunc']);
74        }
75
76        public function getSelfPublicInstance()
77        {
78                return Closure::fromCallable([$this, 'publicInstanceFunc']);
79        }
80
81        public function getSelfColonPublicInstanceMethod()
82        {
83                return Closure::fromCallable('self::publicInstanceFunc');
84        }
85}
86
87
88
89class SubFoo extends Foo {
90       
91        public function closePrivateStaticInvalid()
92        {
93                return Closure::fromCallable([__CLASS__, 'privateStaticFunction']);
94        }
95       
96       
97        public function closePrivateInvalid()
98        {
99                return Closure::fromCallable([$this, 'privateInstanceFunc']);
100        }
101       
102        public function closeProtectedStaticMethod()
103        {
104                return Closure::fromCallable([__CLASS__, 'protectedStaticFunction']);
105        }
106       
107        public function closeProtectedValid()
108        {
109                return Closure::fromCallable([$this, 'protectedInstanceFunc']);
110        }
111
112        public function getParentPublicInstanceMethod()
113        {
114                return Closure::fromCallable('parent::publicInstanceFunc');
115        }
116       
117        public function getSelfColonParentPublicInstanceMethod()
118        {
119                return Closure::fromCallable('self::publicInstanceFunc');
120        }
121       
122       
123        public function getSelfColonParentProtectedInstanceMethod()
124        {
125                return Closure::fromCallable('self::protectedInstanceFunc');
126        }
127
128        public function getSelfColonParentPrivateInstanceMethod()
129        {
130                return Closure::fromCallable('self::privateInstanceFunc');
131        }
132}
133
134
135class MagicCall
136{
137        public function __call($name, $arguments)
138        {
139                $info = ['__call'];
140                $info[] = $name;
141                $info = array_merge($info, $arguments);
142                return implode(',', $info);
143        }
144
145        public static function __callStatic($name, $arguments)
146        {
147                $info = ['__callStatic'];
148                $info[] = $name;
149                $info = array_merge($info, $arguments);
150                return implode(',', $info);
151        }
152}
153
154
155
156class PublicInvokable
157{
158        public function __invoke($param1)
159        {
160                return $param1;
161        }
162}
163
164
165function functionAccessProtected()
166{
167        $foo = new Foo;
168
169        return Closure::fromCallable([$foo, 'protectedStaticFunction']);
170}
171
172function functionAccessPrivate()
173{
174        $foo = new Foo;
175
176        return Closure::fromCallable([$foo, 'privateStaticFunction']);
177}
178
179
180function functionAccessMethodDoesntExist()
181{
182        $foo = new Foo;
183
184        return Closure::fromCallable([$foo, 'thisDoesNotExist']);
185}
186
187?>
Note: See TracBrowser for help on using the repository browser.