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

Last change on this file since 1343 was 1343, checked in by moo, 8 months ago

Decompiler: support for const in static array index; TODO: PHP 5.0- support for static array

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