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

Last change on this file since 1340 was 1340, checked in by moo, 14 months ago

Decompiler: multiple catch support for PHP 5.1-

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