source: trunk/mod_disassembler/sample.php @ 1306

Last change on this file since 1306 was 1306, checked in by moo, 13 months ago

Decompiler, disassembler: fix catch for different PHP version; fetch hack is not necessary for PHP5.4+; update for ?: operator

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