source: trunk/decompilesample.php @ 758

Last change on this file since 758 was 758, checked in by moo, 3 years ago

Decompiler: improves break/continue/goto, updates test sample

  • Property svn:eol-style set to native
File size: 4.8 KB
Line 
1<?php
2
3//* >= PHP 5.3
4namespace ns;
5// */
6
7abstract class ClassName
8{
9    const CONST_VALUE = 'A constant value';
10
11    /** doc */
12    static public $static = array(
13        array('array'),
14        'str'
15        );
16    /** doc */
17    static public $public_static = array(2, 'str');
18    /** doc */
19    static private $private_static = array(2, 'str');
20    /** doc */
21    static protected $protected_static = array(2, 'str');
22    /** doc */
23    public $property = array(
24        array('array'),
25        'str'
26        );
27    /** doc */
28    public $public_property = array(2, 'str');
29    /** doc */
30    private $private_property = array(2, 'str');
31    /** doc */
32    protected $protected_property = array(2, 'str');
33
34    /** doc */
35    public function __construct($a, $b)
36    {
37        echo CONST_VALUE;
38        echo ClassName::CONST_VALUE;
39        unset(ClassName::$classProp);
40        unset($obj->objProp);
41        unset($this->thisProp);
42        unset($array['index']->valueProp);
43        unset($obj->array['index']);
44        unset($this->array['index']);
45        $obj->objProp = 1;
46        $this->thisProp = 1;
47        $array['index']->valueProp = 1;
48        $array['index'] = 1;
49        $array[1] = 1;
50    }
51
52    /** doc */
53    abstract public function abastractMethod();
54
55    /** doc */
56    public function method(array $a = NULL, $b = NULL)
57    {
58    }
59
60    /** doc */
61    public function publicMethod(ClassName $a = NULL, $b = 2)
62    {
63    }
64
65    /** doc */
66    protected function protectedMethod(ClassName $a, $b = array(
67        array('array')
68        ))
69    {
70        $runtimeArray = array('1');
71        $runtimeArray2 = array(
72            '1',
73            array()
74            );
75        $runtimeArray3 = array(
76            'a' => '1',
77            2   => array()
78            );
79        return 'protected';
80    }
81
82    /** doc */
83    private function privateMethod(ClassName $a, $b = NULL)
84    {
85        return 'private';
86    }
87}
88
89interface IInterface
90{
91    public function nothing();
92}
93
94function f1($f)
95{
96    echo __FUNCTION__;
97    echo $f;
98}
99
100final class Child extends ClassName implements IInterface
101{
102    public function __construct()
103    {
104        parent::__construct();
105        ClassName::__construct();
106        echo __CLASS__;
107        echo __METHOD__;
108        throw new Exception();
109        $this->methodCall();
110    }
111
112    public function __destruct()
113    {
114        parent::__destruct();
115        functionCall();
116    }
117
118    static public function __callStatic($name, $args)
119    {
120    }
121
122    public function __toString()
123    {
124    }
125
126    public function __set($name, $value)
127    {
128    }
129
130    public function __get($name)
131    {
132    }
133
134    public function __isset($name)
135    {
136    }
137
138    public function __unset($name)
139    {
140    }
141
142    public function __sleep()
143    {
144    }
145
146    public function __wakeup()
147    {
148    }
149
150    public function __clone()
151    {
152        return array();
153    }
154}
155
156if ($late) {
157class LateBindingClass
158{}
159
160function lateBindingFunction($arg)
161{
162    echo 'lateFunction';
163}
164}
165
166echo "\r\n";
167echo "\r";
168echo "\n";
169echo str_replace(array('a' => 'a', 'b' => 'c'), 'b');
170$object = new ClassName();
171$object = new $className();
172$result = $object instanceof ClassName;
173$cloned = clone $object;
174$a = 1;
175$a = $b + $c;
176$a = $b + 1;
177$a = 1 + $b;
178$a = $b - $c;
179$a = $b * $c;
180$a = $b / $c;
181$a = $b % $c;
182$a = $b . $c;
183$a = $b = $c;
184$a = $b & $c;
185$a = $b | $c;
186$a = $b ^ $c;
187$a = ~$b;
188$a = -$b;
189$a = +$b;
190$a = $b >> $c;
191$a = $b >> $c;
192$a = $b == $c;
193$a = $b === $c;
194$a = $b != $c;
195$a = $b < $c;
196$a = $b <= $c;
197$a = $b <= $c;
198$a = $b++;
199$a = ++$b;
200$a = $obj->b++;
201$a = ++$obj->b;
202$a = $b--;
203$a = --$b;
204$a = $obj->b--;
205$a = --$obj->b;
206$a = $b xor $c;
207$a = !$b;
208$a = $b and $c;
209$a = $b or $c;
210$a = $b && $c;
211$a = $b || $c;
212$a = $b ? $c : $d;
213$a = f1() ? f2() : f3();
214
215try {
216    echo 'outer try 1';
217    try {
218        echo 'inner try';
219    }
220    catch (InnerException $e) {
221        echo $e;
222    }
223    echo 'outer try 2';
224}
225catch (OuterException $e) {
226    echo $e;
227}
228
229if ($a) {
230    echo 'if ($a)';
231}
232else if ($b) {
233    echo 'else if ($b)';
234}
235else {
236    echo 'else';
237}
238
239while (false) {
240    echo 'while';
241}
242
243do {
244    echo 'do/while';
245} while (false);
246
247for ($i = 1; $i < 10; ++$i) {
248    echo $i;
249    break;
250}
251
252foreach ($array as $key => $value) {
253    foreach ($array as $key => $value) {
254        echo $key . ' = ' . $value . "\n";
255        break 2;
256        continue;
257    }
258}
259
260switch ($switch) {
261case 'case1':
262    echo 'case1';
263    break;
264
265case 'case2':
266    echo 'case2';
267    break;
268
269default:
270    echo 'default';
271    break;
272}
273
274declare (ticks=1) {
275    echo 1;
276    echo 2;
277}
278
279require 'require.php';
280require_once 'require_once.php';
281include 'include.php';
282include_once 'include_once.php';
283echo __FILE__;
284echo __LINE__;
285
286//*
287echo 'PHP 5.3+ code testing';
288const CONST_VALUE = 1;
289echo $this::CONST_VALUE;
290echo $a::CONST_VALUE;
291echo CONST_VALUE;
292$this::__construct();
293$obj::__construct();
294
295$a = $b ?: $d;
296$a = f1() ?: f2();
297
298echo 'goto a';
299goto a;
300
301for ($i = 1; $i <= 2; ++$i) {
302    goto a;
303}
304
305a:
306echo 'label a';
307echo preg_replace_callback('~-([a-z])~', function ($match) {
308    return strtoupper($match[1]);
309}, 'hello-world');
310$greet = function ($name) {
311    printf("Hello %s\r\n", $name);
312};
313$greet('World');
314$greet('PHP');
315$total = 0;
316$tax = 1;
317$callback = function ($quantity, $product) use ($tax, &$total) {
318    static $static = array(1);
319    $tax = 'tax';
320    $pricePerItem = constant('PRICE_' . strtoupper($product));
321    $total += $pricePerItem * $quantity * ($tax + 1);
322};
323// */
324
325?>
Note: See TracBrowser for help on using the repository browser.