source: trunk/mod_disassembler/sample.php @ 1295

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

disassembler: fix UNSET_VAR for PHP 5.4+

  • Property svn:eol-style set to native
File size: 6.8 KB
RevLine 
[734]1<?php
2
[753]3//* >= PHP 5.3
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;
[1295]39        unset(t::$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']);
48        echo $GLOBALS['a'];
[749]49        $obj->objProp = 1;
50        $this->thisProp = 1;
51        $array['index']->valueProp = 1;
52        $array['index'] = 1;
53        $array[1] = 1;
[734]54    }
55
[736]56    /** doc */
[749]57    abstract public function abastractMethod();
[747]58
59    /** doc */
[736]60    public function method(array $a = NULL, $b = NULL)
[734]61    {
62    }
63
[736]64    /** doc */
65    public function publicMethod(ClassName $a = NULL, $b = 2)
[734]66    {
67    }
68
[736]69    /** doc */
70    protected function protectedMethod(ClassName $a, $b = array(
[811]71            array('array')
72            ))
[734]73    {
[737]74        $runtimeArray = array('1');
75        $runtimeArray2 = array(
76            '1',
77            array()
78            );
79        $runtimeArray3 = array(
80            'a' => '1',
81            2   => array()
82            );
[734]83        return 'protected';
84    }
85
[736]86    /** doc */
87    private function privateMethod(ClassName $a, $b = NULL)
[734]88    {
89        return 'private';
90    }
91}
92
[747]93interface IInterface
94{
95    public function nothing();
96}
97
[749]98function f1($f)
99{
[751]100    echo __FUNCTION__;
[749]101    echo $f;
102}
103
[747]104final class Child extends ClassName implements IInterface
105{
106    public function __construct()
107    {
108        parent::__construct();
[749]109        ClassName::__construct();
[747]110        echo __CLASS__;
111        echo __METHOD__;
[749]112        throw new Exception();
113        $this->methodCall();
[747]114    }
115
[749]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
[748]130    public function __set($name, $value)
[747]131    {
132    }
133
[748]134    public function __get($name)
[747]135    {
136    }
137
[748]138    public function __isset($name)
[747]139    {
140    }
141
[748]142    public function __unset($name)
[747]143    {
144    }
145
[748]146    public function __sleep()
[747]147    {
148    }
149
[748]150    public function __wakeup()
[747]151    {
152    }
[749]153
154    public function __clone()
155    {
156        return array();
157    }
[747]158}
159
[751]160if ($late) {
[811]161    class LateBindingClass
162    {
163        public function __construct()
164        {
165        }
166    }
[751]167
[811]168    function lateBindingFunction($arg)
169    {
170        echo 'lateFunction';
171    }
[751]172}
173
[750]174echo "\r\n";
175echo "\r";
176echo "\n";
[742]177echo str_replace(array('a' => 'a', 'b' => 'c'), 'b');
[748]178$object = new ClassName();
[749]179$object = new $className();
[751]180$result = $object instanceof ClassName;
[747]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;
[758]196$a = -$b;
197$a = +$b;
[747]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;
[749]208$a = $obj->b++;
209$a = ++$obj->b;
[747]210$a = $b--;
211$a = --$b;
[749]212$a = $obj->b--;
213$a = --$obj->b;
[751]214$a = !$b;
[761]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');
[1288]234// ref(&$a);
[761]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);
[1291]243unset($b);
[761]244$a = isset($array['index']);
245$a = empty($array['index']);
[1291]246unset($array['index']);
[761]247$a = isset($object->prop);
248$a = empty($object->prop);
[1291]249unset($object->prop);
[761]250$a = isset($this->prop);
251$a = empty($this->prop);
[1291]252unset($this->prop);
[1288]253$a = isset(ClassName::$prop);
254$a = empty(ClassName::$prop);
[1291]255unset(ClassName::$prop);
[761]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;
[802]266$a = ($b ? $c : $d);
267$a = (f1() ? f2() : f3());
[805]268($a = $b) xor $c;
269($a = $b) and $c;
270($a = $b) or $c;
[747]271$a = $b && $c;
272$a = $b || $c;
273
[795]274do {
[751]275    try {
[795]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';
[751]286    }
[795]287    catch (OuterException $e) {
[751]288        echo $e;
289    }
[795]290} while (0);
[751]291
[792]292if (if_()) {
293    echo 'if';
[811]294
[792]295    if (innerIf_()) {
296        echo 'if innerIf';
297    }
[747]298}
[792]299else if (elseif_()) {
300    echo 'else if';
[811]301
[792]302    if (innerIf_()) {
303        echo 'if innerIf';
304    }
[747]305}
306else {
[792]307    if (innerIf_()) {
308        echo 'if innerIf';
309    }
[811]310
[747]311    echo 'else';
312}
313
314while (false) {
315    echo 'while';
316}
317
318do {
319    echo 'do/while';
320} while (false);
321
[807]322$i = 1;
323
324for (; $i < 10; ++$i) {
[747]325    echo $i;
326    break;
327}
328
329foreach ($array as $key => $value) {
[789]330    foreach ($value as $key => $value) {
[758]331        echo $key . ' = ' . $value . "\n";
332        break 2;
333        continue;
334    }
[747]335}
336
[790]337switch ($normalSwitch) {
[743]338case 'case1':
339    echo 'case1';
[790]340
341    switch ($nestedSwitch) {
342    case 1:
343    }
344
[743]345    break;
346
347case 'case2':
348    echo 'case2';
349    break;
350
351default:
[790]352    switch ($nestedSwitch) {
353    case 1:
354    }
355
[743]356    echo 'default';
357    break;
358}
359
[790]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
[747]405declare (ticks=1) {
406    echo 1;
[793]407    while (1) {
408        echo 2;
409    }
[747]410}
411
412require 'require.php';
413require_once 'require_once.php';
414include 'include.php';
415include_once 'include_once.php';
[751]416echo __FILE__;
417echo __LINE__;
[747]418
[758]419//*
[752]420echo 'PHP 5.3+ code testing';
421const CONST_VALUE = 1;
[749]422echo $this::CONST_VALUE;
423echo $a::CONST_VALUE;
[752]424echo CONST_VALUE;
[749]425$this::__construct();
426$obj::__construct();
427$a = $b ?: $d;
[760]428$a = ($b ?: $d) + $c;
[749]429$a = f1() ?: f2();
[805]430$a = ($b ? $c : $d);
[799]431$a = ($b ? $c : $d) + $c;
[805]432$a = (f1() ? f3() : f2());
[749]433
[797]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
[749]446echo 'goto a';
[747]447goto a;
448
[807]449$i = 1;
450
451for (; $i <= 2; ++$i) {
[749]452    goto a;
453}
454
[747]455a:
[749]456echo 'label a';
[786]457echo preg_replace_callback('~-([a-z])~', function($match) {
[749]458    return strtoupper($match[1]);
[747]459}, 'hello-world');
[786]460$greet = function($name) {
[747]461    printf("Hello %s\r\n", $name);
462};
463$greet('World');
464$greet('PHP');
[749]465$total = 0;
[758]466$tax = 1;
[781]467$callback = function($quantity, $product) use($tax, &$total) {
[758]468    $tax = 'tax';
[781]469    static $static1 = array(1);
470    static $static2;
471    $tax = 'tax';
[780]472    $tax = --$tax;
[749]473    $pricePerItem = constant('PRICE_' . strtoupper($product));
474    $total += $pricePerItem * $quantity * ($tax + 1);
[747]475};
[749]476// */
[761]477exit();
[747]478
[734]479?>
Note: See TracBrowser for help on using the repository browser.