source: trunk/mod_disassembler/sample.php @ 1295

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

disassembler: fix UNSET_VAR for PHP 5.4+

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