source: trunk/mod_disassembler/sample.php @ 1305

Last change on this file since 1305 was 1305, checked in by moo, 16 months ago

Decompiler: adds simple backtrace print, fix warning for catch

  • Property svn:eol-style set to native
File size: 7.0 KB
RevLine 
[734]1<?php
2
[1296]3/* >= PHP 5.3
[753]4namespace ns;
5// */
6
[747]7abstract class ClassName
[734]8{
[748]9    const CONST_VALUE = 'A constant value';
10
[736]11    /** doc */
[734]12    static public $static = array(
13        array('array'),
14        'str'
15        );
[736]16    /** doc */
[734]17    static public $public_static = array(2, 'str');
[736]18    /** doc */
[734]19    static private $private_static = array(2, 'str');
[736]20    /** doc */
[734]21    static protected $protected_static = array(2, 'str');
[736]22    /** doc */
[734]23    public $property = array(
24        array('array'),
25        'str'
26        );
[736]27    /** doc */
[734]28    public $public_property = array(2, 'str');
[736]29    /** doc */
[734]30    private $private_property = array(2, 'str');
[736]31    /** doc */
[734]32    protected $protected_property = array(2, 'str');
33
[736]34    /** doc */
[734]35    public function __construct($a, $b)
36    {
[747]37        echo CONST_VALUE;
38        echo ClassName::CONST_VALUE;
[1302]39        unset(ClassName::$classProp1);
[749]40        unset($obj->objProp);
41        unset($this->thisProp);
42        unset($array['index']->valueProp);
43        unset($obj->array['index']);
44        unset($this->array['index']);
[1295]45        isset($GLOBALS['a']);
46        empty($GLOBALS['a']);
47        unset($GLOBALS['a']);
[1302]48        isset(ClassName::$a);
49        empty(ClassName::$a);
50        unset(ClassName::$a);
[1295]51        echo $GLOBALS['a'];
[749]52        $obj->objProp = 1;
53        $this->thisProp = 1;
54        $array['index']->valueProp = 1;
55        $array['index'] = 1;
56        $array[1] = 1;
[734]57    }
58
[736]59    /** doc */
[749]60    abstract public function abastractMethod();
[747]61
62    /** doc */
[1302]63    public function method($a = NULL, $b = NULL)
[734]64    {
65    }
66
[736]67    /** doc */
68    public function publicMethod(ClassName $a = NULL, $b = 2)
[734]69    {
70    }
71
[736]72    /** doc */
73    protected function protectedMethod(ClassName $a, $b = array(
[811]74            array('array')
75            ))
[734]76    {
[737]77        $runtimeArray = array('1');
78        $runtimeArray2 = array(
79            '1',
80            array()
81            );
82        $runtimeArray3 = array(
83            'a' => '1',
84            2   => array()
85            );
[734]86        return 'protected';
87    }
88
[736]89    /** doc */
90    private function privateMethod(ClassName $a, $b = NULL)
[734]91    {
92        return 'private';
93    }
94}
95
[747]96interface IInterface
97{
98    public function nothing();
99}
100
[749]101function f1($f)
102{
[751]103    echo __FUNCTION__;
[749]104    echo $f;
105}
106
[747]107final class Child extends ClassName implements IInterface
108{
109    public function __construct()
110    {
111        parent::__construct();
[749]112        ClassName::__construct();
[747]113        echo __CLASS__;
114        echo __METHOD__;
[1302]115        echo __FUNCTION__;
[749]116        throw new Exception();
117        $this->methodCall();
[747]118    }
119
[749]120    public function __destruct()
121    {
122        parent::__destruct();
123        functionCall();
124    }
125
126    static public function __callStatic($name, $args)
127    {
[1302]128        parent::__callStatic($name, $args);
[749]129    }
130
131    public function __toString()
132    {
[1302]133        parent::__toString();
[749]134    }
135
[748]136    public function __set($name, $value)
[747]137    {
138    }
139
[748]140    public function __get($name)
[747]141    {
142    }
143
[748]144    public function __isset($name)
[747]145    {
146    }
147
[748]148    public function __unset($name)
[747]149    {
150    }
151
[748]152    public function __sleep()
[747]153    {
154    }
155
[748]156    public function __wakeup()
[747]157    {
158    }
[749]159
160    public function __clone()
161    {
162        return array();
163    }
[747]164}
165
[751]166if ($late) {
[811]167    class LateBindingClass
168    {
169        public function __construct()
170        {
171        }
172    }
[751]173
[811]174    function lateBindingFunction($arg)
175    {
176        echo 'lateFunction';
[1302]177        return new lateBindingFunction();
[811]178    }
[751]179}
180
[750]181echo "\r\n";
182echo "\r";
183echo "\n";
[742]184echo str_replace(array('a' => 'a', 'b' => 'c'), 'b');
[748]185$object = new ClassName();
[749]186$object = new $className();
[751]187$result = $object instanceof ClassName;
[747]188$cloned = clone $object;
189$a = 1;
190$a = $b + $c;
191$a = $b + 1;
192$a = 1 + $b;
193$a = $b - $c;
194$a = $b * $c;
195$a = $b / $c;
196$a = $b % $c;
197$a = $b . $c;
198$a = $b = $c;
199$a = $b & $c;
200$a = $b | $c;
201$a = $b ^ $c;
202$a = ~$b;
[758]203$a = -$b;
204$a = +$b;
[747]205$a = $b >> $c;
206$a = $b >> $c;
207$a = $b == $c;
208$a = $b === $c;
209$a = $b != $c;
210$a = $b < $c;
211$a = $b <= $c;
212$a = $b <= $c;
213$a = $b++;
214$a = ++$b;
[749]215$a = $obj->b++;
216$a = ++$obj->b;
[747]217$a = $b--;
218$a = --$b;
[749]219$a = $obj->b--;
220$a = --$obj->b;
[751]221$a = !$b;
[761]222$a = $b === $c;
223$a = $b !== $c;
224$a = $b << 2;
225$a = $b >> 3;
226$a += $b;
227$a -= $b;
228$a *= $b;
229$a /= $b;
230$a <<= $b;
231$a >>= $b;
232$a &= $b;
233$a |= $b;
234$a .= $b;
235$a %= $b;
236$a ^= $b;
237$a = 'a' . 'b';
238$a = 'a' . 'abc';
239@f1();
240print('1');
[1288]241// ref(&$a);
[761]242$a = $array['index'];
243$a = $object->prop;
244$a = $this->prop;
245$array['index'] = 1;
246$object->prop = 1;
247$this->prop = 1;
248$a = isset($b);
249$a = empty($b);
[1291]250unset($b);
[761]251$a = isset($array['index']);
252$a = empty($array['index']);
[1291]253unset($array['index']);
[761]254$a = isset($object->prop);
255$a = empty($object->prop);
[1291]256unset($object->prop);
[761]257$a = isset($this->prop);
258$a = empty($this->prop);
[1291]259unset($this->prop);
[1288]260$a = isset(ClassName::$prop);
261$a = empty(ClassName::$prop);
[1291]262unset(ClassName::$prop);
[761]263$a = (int) $b;
264$a = (double) $b;
265$a = (string) $b;
266$a = (array) $b;
267$a = (object) $b;
268$a = (bool) $b;
269$a = (unset) $b;
270$a = (array) $b;
271$a = (object) $b;
272// PHP6+ $a = (scalar) $b;
[802]273$a = ($b ? $c : $d);
274$a = (f1() ? f2() : f3());
[805]275($a = $b) xor $c;
276($a = $b) and $c;
277($a = $b) or $c;
[747]278$a = $b && $c;
279$a = $b || $c;
280
[795]281do {
[751]282    try {
[795]283        echo 'outer try 1';
284
285        try {
286            echo 'inner try';
287        }
288        catch (InnerException $e) {
289            echo $e;
290        }
291
292        echo 'outer try 2';
[751]293    }
[795]294    catch (OuterException $e) {
[751]295        echo $e;
296    }
[795]297} while (0);
[751]298
[792]299if (if_()) {
300    echo 'if';
[811]301
[792]302    if (innerIf_()) {
303        echo 'if innerIf';
304    }
[747]305}
[792]306else if (elseif_()) {
307    echo 'else if';
[811]308
[792]309    if (innerIf_()) {
310        echo 'if innerIf';
311    }
[747]312}
313else {
[792]314    if (innerIf_()) {
315        echo 'if innerIf';
316    }
[811]317
[747]318    echo 'else';
319}
320
321while (false) {
322    echo 'while';
323}
324
325do {
326    echo 'do/while';
327} while (false);
328
[807]329$i = 1;
330
331for (; $i < 10; ++$i) {
[747]332    echo $i;
333    break;
334}
335
336foreach ($array as $key => $value) {
[789]337    foreach ($value as $key => $value) {
[758]338        echo $key . ' = ' . $value . "\n";
339        break 2;
340        continue;
341    }
[747]342}
343
[790]344switch ($normalSwitch) {
[743]345case 'case1':
346    echo 'case1';
[790]347
348    switch ($nestedSwitch) {
349    case 1:
350    }
351
[743]352    break;
353
354case 'case2':
355    echo 'case2';
356    break;
357
358default:
[790]359    switch ($nestedSwitch) {
360    case 1:
361    }
362
[743]363    echo 'default';
364    break;
365}
366
[790]367switch ($switchWithoutDefault) {
368case 'case1':
369    echo 'case1';
370    break;
371
372case 'case2':
373    echo 'case2';
374    break;
375}
376
377switch ($switchWithMiddleDefault) {
378case 'case1':
379    echo 'case1';
380    break;
381
382default:
383    echo 'default';
384    break;
385
386case 'case2':
387    echo 'case2';
388    break;
389}
390
391switch ($switchWithInitialDefault) {
392default:
393    echo 'default';
394    break;
395
396case 'case1':
397    echo 'case1';
398    break;
399
400case 'case2':
401    echo 'case2';
402    break;
403}
404
405switch (emptySwitch()) {
406}
407
408switch (emptySwitch()) {
409default:
410}
411
[747]412declare (ticks=1) {
413    echo 1;
[1305]414}
415
416while (1) {
417    declare (ticks=1) {
[793]418        echo 2;
419    }
[747]420}
421
422require 'require.php';
423require_once 'require_once.php';
424include 'include.php';
425include_once 'include_once.php';
[751]426echo __FILE__;
427echo __LINE__;
[747]428
[1296]429/*
[752]430echo 'PHP 5.3+ code testing';
431const CONST_VALUE = 1;
[749]432echo $this::CONST_VALUE;
433echo $a::CONST_VALUE;
[752]434echo CONST_VALUE;
[749]435$this::__construct();
436$obj::__construct();
437$a = $b ?: $d;
[760]438$a = ($b ?: $d) + $c;
[749]439$a = f1() ?: f2();
[805]440$a = ($b ? $c : $d);
[799]441$a = ($b ? $c : $d) + $c;
[805]442$a = (f1() ? f3() : f2());
[749]443
[797]444if ($b ?: $d) {
445    echo 'if ($b ?: $d)';
446}
447
448if (($b ?: $d) + $c) {
449    echo 'if (($b ?: $d) + $c)';
450}
451
452if (f1() ?: f2()) {
453    echo 'if (f1() ?: f2())';
454}
455
[749]456echo 'goto a';
[747]457goto a;
458
[807]459$i = 1;
460
461for (; $i <= 2; ++$i) {
[749]462    goto a;
463}
464
[747]465a:
[749]466echo 'label a';
[786]467echo preg_replace_callback('~-([a-z])~', function($match) {
[749]468    return strtoupper($match[1]);
[747]469}, 'hello-world');
[786]470$greet = function($name) {
[747]471    printf("Hello %s\r\n", $name);
472};
473$greet('World');
474$greet('PHP');
[749]475$total = 0;
[758]476$tax = 1;
[781]477$callback = function($quantity, $product) use($tax, &$total) {
[758]478    $tax = 'tax';
[781]479    static $static1 = array(1);
480    static $static2;
481    $tax = 'tax';
[780]482    $tax = --$tax;
[749]483    $pricePerItem = constant('PRICE_' . strtoupper($product));
484    $total += $pricePerItem * $quantity * ($tax + 1);
[747]485};
[749]486// */
[761]487exit();
[747]488
[734]489?>
Note: See TracBrowser for help on using the repository browser.