source: trunk/mod_disassembler/sample.cpp.php @ 1374

Last change on this file since 1374 was 1374, checked in by moo, 7 months ago

Decompiler: fixes #318 (support for const in static array index/value)

  • Property svn:eol-style set to native
File size: 10.1 KB
Line 
1<?php
2#if PHP_VERSION >= 500
3#   define PublicMethod public
4#else
5#   define ClassName classname
6#   define PublicMethod
7#   define abstract
8#   define innerIf_ innerif_
9#   define emptySwitch emptyswitch
10#   define defaultSwitch defaultswitch
11#endif
12#if PHP_VERSION >= 520
13#else
14#   define __callStatic __callstatic
15#   define __toString __tostring
16#endif
17#if PHP_VERSION >= 530
18
19namespace ns;
20#endif
21
22abstract class ClassName
23{
24#if PHP_VERSION >= 500
25    const CONST_VALUE = 'A constant value';
26
27    /** doc */
28    static public $static = array(
29        0           => array('array'),
30        1           => 'str',
31        CONST_VALUE => CONST_VALUE
32        );
33    static public $static_const1 = CONST_VALUE;
34    static public $static_const2 = self::CONST_VALUE;
35    static public $static_const3 = ClassName::CONST_VALUE;
36    static public $static_const4 = array(CONST_VALUE => 'test');
37    static public $static_const5 = array(self::CONST_VALUE => 'test');
38    static public $static_const6 = array(ClassName::CONST_VALUE => 'test');
39    static public $static_const7 = array('test' => CONST_VALUE);
40    static public $static_const8 = array('test' => self::CONST_VALUE);
41    static public $static_const9 = array('test' => ClassName::CONST_VALUE);
42    static public $static_const10 = array(CONST_VALUE => CONST_VALUE);
43    static public $static_const11 = array(self::CONST_VALUE => self::CONST_VALUE);
44    static public $static_const12 = array(ClassName::CONST_VALUE => ClassName::CONST_VALUE);
45    /** doc */
46    static public $public_static = array(2, 'str');
47    /** doc */
48    static private $private_static = array(2, 'str');
49    static private $private_static2 = array(self::CONST_VALUE => self::CONST_VALUE);
50    /** doc */
51    static protected $protected_static = array(2, 'str');
52    static protected $protected_static2 = array(self::CONST_VALUE => self::CONST_VALUE);
53    /** doc */
54    public $property = array(
55        array('array'),
56        'str'
57        );
58    /** doc */
59    public $public_property = array(2, 'str');
60    /** doc */
61    private $private_property = array(2, 'str');
62    /** doc */
63    protected $protected_property = array(2, 'str');
64#else
65    var $property = array(
66        array('array'),
67        'str'
68        );
69#endif
70
71#if PHP_VERSION >= 500
72    /** doc */
73#endif
74    PublicMethod function __construct($a, $b)
75    {
76        static $array = array(
77            0           => array('array'),
78            1           => 'str',
79            CONST_VALUE => CONST_VALUE
80            );
81        static $a = 1;
82        static $str = 'string';
83        echo CONST_VALUE;
84#if PHP_VERSION >= 500
85        echo ClassName::CONST_VALUE;
86        empty(ClassName::$classProp);
87        isset(ClassName::$classProp);
88        unset(ClassName::$classProp);
89        ClassName::$classProp = 1;
90        echo ClassName::$classProp;
91#endif
92        empty($obj->objProp);
93        isset($obj->objProp);
94#if PHP_VERSION >= 500
95        unset($obj->objProp);
96#endif
97        $obj->objProp = 1;
98        echo $obj->objProp;
99        empty($this->thisProp);
100        isset($this->thisProp);
101#if PHP_VERSION >= 500
102        unset($this->thisProp);
103#endif
104        $this->thisProp = 1;
105        echo $this->thisProp;
106#if PHP_VERSION >= 500
107        unset($array['index']->valueProp);
108#endif
109        unset($obj->array['index']);
110        unset($this->array['index']);
111        empty($_GET['get']);
112        isset($_GET['get']);
113        unset($_GET['get']);
114        $_GET['get'] = 1;
115        echo $_GET['get'];
116        isset($GLOBALS['global']);
117        empty($GLOBALS['global']);
118        unset($GLOBALS['global']);
119        $GLOBALS['global'] = 1;
120        echo $GLOBALS['global'];
121        empty($array['index']);
122        isset($array['index']);
123        unset($array['index']);
124        $array['index'] = 1;
125        echo $array['index'];
126        empty($array['index']->indexProp);
127        isset($array['index']->indexProp);
128#if PHP_VERSION >= 500
129        unset($array['index']->indexProp);
130#endif
131        $array['index']->indexProp = 1;
132        echo $array['index']->indexProp;
133        empty($GLOBALS['var']->indexProp);
134        isset($GLOBALS['var']->indexProp);
135#if PHP_VERSION >= 500
136        unset($GLOBALS['var']->indexProp);
137#endif
138        $GLOBALS['var']->indexProp = 1;
139        echo $GLOBALS['var']->indexProp;
140        ClassName::__construct();
141        ClassName::$func();
142        echo __CLASS__;
143        echo __METHOD__;
144        echo __FUNCTION__;
145        $this->methodCall();
146#if PHP_VERSION >= 500
147        throw new Exception();
148        new Exception();
149#endif
150    }
151#if PHP_VERSION >= 500
152
153    /** doc */
154    abstract public function abastractMethod();
155#endif
156
157#if PHP_VERSION >= 500
158    /** doc */
159#endif
160    PublicMethod function method($a = NULL, $b = NULL)
161    {
162    }
163#if PHP_VERSION >= 500
164
165    /** doc */
166    protected function protectedMethod(ClassName $a, $b = array(
167            array('array')
168            ))
169    {
170        $runtimeArray = array('1');
171        $runtimeArray2 = array(
172            '1',
173            array()
174            );
175        $runtimeArray3 = array(
176            'a' => '1',
177            2   => array()
178            );
179        return 'protected';
180    }
181
182    /** doc */
183    private function privateMethod(ClassName $a, $b = NULL)
184    {
185        return 'private';
186    }
187#endif
188}
189#if PHP_VERSION >= 500
190
191interface IInterface
192{
193    public function nothing();
194}
195#endif
196
197function f1($f)
198{
199    echo __FUNCTION__;
200    echo $f;
201#if PHP_VERSION >= 550
202
203    foreach ($a as $b) {
204        yield $b;
205    }
206
207    yield f1($b);
208#endif
209}
210#if PHP_VERSION >= 500
211
212final class Child extends ClassName implements IInterface
213{
214    public function __construct()
215    {
216        parent::__construct();
217    }
218
219    public function __destruct()
220    {
221        parent::__destruct();
222        functionCall();
223    }
224
225    static public function __callStatic($name, $args)
226    {
227        parent::__callStatic($name, $args);
228    }
229
230    public function __toString()
231    {
232        parent::__toString();
233    }
234
235    public function __set($name, $value)
236    {
237    }
238
239    public function __get($name)
240    {
241    }
242
243    public function __isset($name)
244    {
245    }
246
247    public function __unset($name)
248    {
249    }
250
251    public function __sleep()
252    {
253    }
254
255    public function __wakeup()
256    {
257    }
258
259    public function __clone()
260    {
261        return array();
262    }
263}
264#endif
265
266if ($late) {
267    class LateBindingClass
268    {
269        PublicMethod function __construct()
270        {
271        }
272    }
273
274    function lateBindingFunction($arg)
275    {
276        echo 'lateFunction';
277        return new lateBindingFunction();
278    }
279}
280
281echo "\r\n";
282echo "\r";
283echo "\n";
284echo str_replace(array('a' => 'a', 'b' => 'c'), 'b');
285$object = new ClassName();
286$object = new $className();
287#if PHP_VERSION >= 500
288$result = $object instanceof ClassName;
289$cloned = clone $object;
290#endif
291$a = 1;
292$a = $b + $c;
293$a = $b + 1;
294$a = 1 + $b;
295$a = $b - $c;
296$a = $b * $c;
297$a = $b / $c;
298$a = $b % $c;
299$a = $b . $c;
300$a = $b = $c;
301$a = $b & $c;
302$a = $b | $c;
303$a = $b ^ $c;
304$a = ~$b;
305$a = -$b;
306$a = +$b;
307$a = $b >> $c;
308$a = $b >> $c;
309$a = $b == $c;
310$a = $b === $c;
311$a = $b != $c;
312$a = $b < $c;
313$a = $b <= $c;
314$a = $b <= $c;
315$a = $b++;
316$a = ++$b;
317$a = $obj->b++;
318$a = ++$obj->b;
319$a = $b--;
320$a = --$b;
321$a = $obj->b--;
322$a = --$obj->b;
323$a = !$b;
324$a = $b === $c;
325$a = $b !== $c;
326$a = $b << 2;
327$a = $b >> 3;
328$a += $b;
329$a -= $b;
330$a *= $b;
331$a /= $b;
332$a <<= $b;
333$a >>= $b;
334$a &= $b;
335$a |= $b;
336$a .= $b;
337$a %= $b;
338$a ^= $b;
339$a = 'a' . 'b';
340$a = 'a' . 'abc';
341@f1();
342print('1');
343$a = $array['index'];
344$a = $object->prop;
345$a = $this->prop;
346$array['index'] = 1;
347$object->prop = 1;
348$this->prop = 1;
349$a = isset($b);
350$a = empty($b);
351unset($b);
352$a = isset($array['index']);
353$a = empty($array['index']);
354unset($array['index']);
355$a = isset($object->prop);
356$a = empty($object->prop);
357#if PHP_VERSION >= 500
358unset($object->prop);
359#endif
360$a = isset($this->prop);
361$a = empty($this->prop);
362#if PHP_VERSION >= 500
363unset($this->prop);
364$a = isset(ClassName::$prop);
365$a = empty(ClassName::$prop);
366unset(ClassName::$prop);
367#endif
368$a = (int) $b;
369$a = (double) $b;
370$a = (string) $b;
371$a = (array) $b;
372$a = (object) $b;
373$a = (bool) $b;
374$a = (unset) $b;
375$a = (array) $b;
376$a = (object) $b;
377$a = ($b ? $c : $d);
378$a = (f1() ? f2() : f3());
379($a = $b) xor $c;
380($a = $b) and $c;
381($a = $b) or $c;
382$a = $b && $c;
383$a = $b || $c;
384#if PHP_VERSION >= 500
385
386do {
387    try {
388        echo 'outer try 1';
389
390        try {
391            echo 'inner try';
392        }
393        catch (InnerException $e) {
394            echo $e;
395        }
396        catch (InnerException2 $e2) {
397            echo $e2;
398        }
399#if PHP_VERSION >= 550
400        finally {
401            echo 'inner finally';
402        }
403#endif
404
405        echo 'outer try 2';
406    }
407    catch (OuterException $e) {
408        echo $e;
409    }
410    catch (OuterException2 $e2) {
411        echo $e2;
412    }
413#if PHP_VERSION >= 550
414    finally {
415        echo 'outer finally';
416    }
417#endif
418} while (0);
419#endif
420
421if (if_()) {
422    echo 'if';
423
424    if (innerIf_()) {
425        echo 'if innerIf';
426    }
427}
428else if (elseif_()) {
429    echo 'else if';
430
431    if (innerIf_()) {
432        echo 'if innerIf';
433    }
434}
435else {
436    if (innerIf_()) {
437        echo 'if innerIf';
438    }
439
440    echo 'else';
441}
442
443while (false) {
444    echo 'while';
445}
446
447do {
448    echo 'do/while';
449} while (false);
450
451$i = 1;
452
453for (; $i < 10; ++$i) {
454    echo $i;
455    break;
456}
457
458foreach ($array as $value) {
459    foreach ($value as $key => $value) {
460        echo $key . ' = ' . $value . "\n";
461        break 2;
462        continue;
463    }
464}
465
466switch ($normalSwitch) {
467case 'case1':
468    echo 'case1';
469
470    switch ($nestedSwitch) {
471    case 1:
472    }
473
474    break;
475
476case 'case2':
477    echo 'case2';
478    break;
479
480default:
481    switch ($nestedSwitch) {
482    case 1:
483    }
484
485    echo 'default';
486    break;
487}
488
489switch ($switchWithoutDefault) {
490case 'case1':
491    echo 'case1';
492    break;
493
494case 'case2':
495    echo 'case2';
496    break;
497}
498
499switch ($switchWithMiddleDefault) {
500case 'case1':
501    echo 'case1';
502    break;
503
504default:
505    echo 'default';
506    break;
507
508case 'case2':
509    echo 'case2';
510    break;
511}
512
513switch ($switchWithInitialDefault) {
514default:
515    echo 'default';
516    break;
517
518case 'case1':
519    echo 'case1';
520    break;
521
522case 'case2':
523    echo 'case2';
524    break;
525}
526
527switch (emptySwitch()) {
528}
529
530switch (defaultSwitch()) {
531default:
532}
533
534declare (ticks=1) {
535    echo 1;
536}
537
538while (1) {
539    declare (ticks=1) {
540        echo 2;
541    }
542}
543
544require 'require.php';
545require_once 'require_once.php';
546include 'include.php';
547include_once 'include_once.php';
548echo __FILE__;
549echo __LINE__;
550#if PHP_VERSION >= 530
551echo 'PHP 5.3+ code testing';
552const CONST_VALUE = 1;
553echo $this::CONST_VALUE;
554echo $a::CONST_VALUE;
555echo CONST_VALUE;
556$this::__construct();
557$obj::__construct();
558$a = $b ?: $d;
559$a = ($b ?: $d) + $c;
560$a = f1() ?: f2();
561$a = C::f1() ?: C::f2();
562$a = ($b ? $c : $d);
563$a = ($b ? $c : $d) + $c;
564$a = (f1() ? f3() : f2());
565
566if ($b ?: $d) {
567    echo 'if ($b ?: $d)';
568}
569
570if (($b ?: $d) + $c) {
571    echo 'if (($b ?: $d) + $c)';
572}
573
574if (f1() ?: f2()) {
575    echo 'if (f1() ?: f2())';
576}
577
578echo 'goto a';
579goto a;
580
581$i = 1;
582
583for (; $i <= 2; ++$i) {
584    goto a;
585}
586
587a:
588echo 'label a';
589echo preg_replace_callback('~-([a-z])~', function($match) {
590    return strtoupper($match[1]);
591}, 'hello-world');
592$greet = function($name) {
593    printf('Hello %s' . "\r\n" . '', $name);
594};
595$greet('World');
596$greet('PHP');
597$total = 0;
598$tax = 1;
599$callback = function($quantity, $product) use($tax, &$total) {
600    $tax = 'tax';
601    static $static1 = array(1);
602    static $static2;
603    $tax = 'tax';
604    $tax = --$tax;
605    $pricePerItem = constant('PRICE_' . strtoupper($product));
606    $total += $pricePerItem * $quantity * ($tax + 1);
607};
608#endif
609exit();
610
611?>
Note: See TracBrowser for help on using the repository browser.