source: branches/1.3/decompilesample.php @ 817

Last change on this file since 817 was 817, checked in by moo, 3 years ago

merge from trunk: disassembler/decompiler improvements

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