source: trunk/mod_disassembler/sample.php @ 1302

Last change on this file since 1302 was 1302, checked in by moo, 15 months ago

Disassembler: can now recover compile time constant

  • Property svn:eol-style set to native
File size: 7.0 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        unset(ClassName::$classProp1);
40        unset($obj->objProp);
41        unset($this->thisProp);
42        unset($array['index']->valueProp);
43        unset($obj->array['index']);
44        unset($this->array['index']);
45        isset($GLOBALS['a']);
46        empty($GLOBALS['a']);
47        unset($GLOBALS['a']);
48        isset(ClassName::$a);
49        empty(ClassName::$a);
50        unset(ClassName::$a);
51        echo $GLOBALS['a'];
52        $obj->objProp = 1;
53        $this->thisProp = 1;
54        $array['index']->valueProp = 1;
55        $array['index'] = 1;
56        $array[1] = 1;
57    }
58
59    /** doc */
60    abstract public function abastractMethod();
61
62    /** doc */
63    public function method($a = NULL, $b = NULL)
64    {
65    }
66
67    /** doc */
68    public function publicMethod(ClassName $a = NULL, $b = 2)
69    {
70    }
71
72    /** doc */
73    protected function protectedMethod(ClassName $a, $b = array(
74            array('array')
75            ))
76    {
77        $runtimeArray = array('1');
78        $runtimeArray2 = array(
79            '1',
80            array()
81            );
82        $runtimeArray3 = array(
83            'a' => '1',
84            2   => array()
85            );
86        return 'protected';
87    }
88
89    /** doc */
90    private function privateMethod(ClassName $a, $b = NULL)
91    {
92        return 'private';
93    }
94}
95
96interface IInterface
97{
98    public function nothing();
99}
100
101function f1($f)
102{
103    echo __FUNCTION__;
104    echo $f;
105}
106
107final class Child extends ClassName implements IInterface
108{
109    public function __construct()
110    {
111        parent::__construct();
112        ClassName::__construct();
113        echo __CLASS__;
114        echo __METHOD__;
115        echo __FUNCTION__;
116        throw new Exception();
117        $this->methodCall();
118    }
119
120    public function __destruct()
121    {
122        parent::__destruct();
123        functionCall();
124    }
125
126    static public function __callStatic($name, $args)
127    {
128        parent::__callStatic($name, $args);
129    }
130
131    public function __toString()
132    {
133        parent::__toString();
134    }
135
136    public function __set($name, $value)
137    {
138    }
139
140    public function __get($name)
141    {
142    }
143
144    public function __isset($name)
145    {
146    }
147
148    public function __unset($name)
149    {
150    }
151
152    public function __sleep()
153    {
154    }
155
156    public function __wakeup()
157    {
158    }
159
160    public function __clone()
161    {
162        return array();
163    }
164}
165
166if ($late) {
167    class LateBindingClass
168    {
169        public function __construct()
170        {
171        }
172    }
173
174    function lateBindingFunction($arg)
175    {
176        echo 'lateFunction';
177        return new lateBindingFunction();
178    }
179}
180
181echo "\r\n";
182echo "\r";
183echo "\n";
184echo str_replace(array('a' => 'a', 'b' => 'c'), 'b');
185$object = new ClassName();
186$object = new $className();
187$result = $object instanceof ClassName;
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;
203$a = -$b;
204$a = +$b;
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;
215$a = $obj->b++;
216$a = ++$obj->b;
217$a = $b--;
218$a = --$b;
219$a = $obj->b--;
220$a = --$obj->b;
221$a = !$b;
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');
241// ref(&$a);
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);
250unset($b);
251$a = isset($array['index']);
252$a = empty($array['index']);
253unset($array['index']);
254$a = isset($object->prop);
255$a = empty($object->prop);
256unset($object->prop);
257$a = isset($this->prop);
258$a = empty($this->prop);
259unset($this->prop);
260$a = isset(ClassName::$prop);
261$a = empty(ClassName::$prop);
262unset(ClassName::$prop);
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;
273$a = ($b ? $c : $d);
274$a = (f1() ? f2() : f3());
275($a = $b) xor $c;
276($a = $b) and $c;
277($a = $b) or $c;
278$a = $b && $c;
279$a = $b || $c;
280
281do {
282    try {
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';
293    }
294    catch (OuterException $e) {
295        echo $e;
296    }
297} while (0);
298
299if (if_()) {
300    echo 'if';
301
302    if (innerIf_()) {
303        echo 'if innerIf';
304    }
305}
306else if (elseif_()) {
307    echo 'else if';
308
309    if (innerIf_()) {
310        echo 'if innerIf';
311    }
312}
313else {
314    if (innerIf_()) {
315        echo 'if innerIf';
316    }
317
318    echo 'else';
319}
320
321while (false) {
322    echo 'while';
323}
324
325do {
326    echo 'do/while';
327} while (false);
328
329$i = 1;
330
331for (; $i < 10; ++$i) {
332    echo $i;
333    break;
334}
335
336foreach ($array as $key => $value) {
337    foreach ($value as $key => $value) {
338        echo $key . ' = ' . $value . "\n";
339        break 2;
340        continue;
341    }
342}
343
344switch ($normalSwitch) {
345case 'case1':
346    echo 'case1';
347
348    switch ($nestedSwitch) {
349    case 1:
350    }
351
352    break;
353
354case 'case2':
355    echo 'case2';
356    break;
357
358default:
359    switch ($nestedSwitch) {
360    case 1:
361    }
362
363    echo 'default';
364    break;
365}
366
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
412declare (ticks=1) {
413    echo 1;
414    while (1) {
415        echo 2;
416    }
417}
418
419require 'require.php';
420require_once 'require_once.php';
421include 'include.php';
422include_once 'include_once.php';
423echo __FILE__;
424echo __LINE__;
425
426/*
427echo 'PHP 5.3+ code testing';
428const CONST_VALUE = 1;
429echo $this::CONST_VALUE;
430echo $a::CONST_VALUE;
431echo CONST_VALUE;
432$this::__construct();
433$obj::__construct();
434$a = $b ?: $d;
435$a = ($b ?: $d) + $c;
436$a = f1() ?: f2();
437$a = ($b ? $c : $d);
438$a = ($b ? $c : $d) + $c;
439$a = (f1() ? f3() : f2());
440
441if ($b ?: $d) {
442    echo 'if ($b ?: $d)';
443}
444
445if (($b ?: $d) + $c) {
446    echo 'if (($b ?: $d) + $c)';
447}
448
449if (f1() ?: f2()) {
450    echo 'if (f1() ?: f2())';
451}
452
453echo 'goto a';
454goto a;
455
456$i = 1;
457
458for (; $i <= 2; ++$i) {
459    goto a;
460}
461
462a:
463echo 'label a';
464echo preg_replace_callback('~-([a-z])~', function($match) {
465    return strtoupper($match[1]);
466}, 'hello-world');
467$greet = function($name) {
468    printf("Hello %s\r\n", $name);
469};
470$greet('World');
471$greet('PHP');
472$total = 0;
473$tax = 1;
474$callback = function($quantity, $product) use($tax, &$total) {
475    $tax = 'tax';
476    static $static1 = array(1);
477    static $static2;
478    $tax = 'tax';
479    $tax = --$tax;
480    $pricePerItem = constant('PRICE_' . strtoupper($product));
481    $total += $pricePerItem * $quantity * ($tax + 1);
482};
483// */
484exit();
485
486?>
Note: See TracBrowser for help on using the repository browser.