source: trunk/devel/sample.cpp.php @ 1441

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

make sample work for all beside decompiler

  • Property svn:eol-style set to native
File size: 11.1 KB
Line 
1<?php
2#if PHP_VERSION >= 500
3#   define PublicMethod public
4#else
5#   define ClassName classname
6#   define PublicMethod
7#   define abstract
8#   define innerIf_ innerif_
9#   define emptySwitch emptyswitch
10#   define defaultSwitch defaultswitch
11#endif
12#if PHP_VERSION >= 520
13#else
14#   define __callStatic __callstatic
15#   define __toString __tostring
16#endif
17#if PHP_VERSION >= 530
18
19namespace ns;
20#define _Exception \Exception
21#endif
22
23abstract class ClassName
24{
25#if PHP_VERSION >= 500
26    const CONST_VALUE = 'A constant value';
27
28    /** doc */
29    static public $static = array(
30        0           => array('array'),
31        1           => 'str',
32        CONST_VALUE => CONST_VALUE
33        );
34    static public $classProp;
35    static public $static_const1 = CONST_VALUE;
36    static public $static_const2 = self::CONST_VALUE;
37    static public $static_const3 = ClassName::CONST_VALUE;
38    static public $static_const4 = array(CONST_VALUE => 'test');
39    static public $static_const5 = array(self::CONST_VALUE => 'test');
40    static public $static_const6 = array(ClassName::CONST_VALUE => 'test');
41    static public $static_const7 = array('test' => CONST_VALUE);
42    static public $static_const8 = array('test' => self::CONST_VALUE);
43    static public $static_const9 = array('test' => ClassName::CONST_VALUE);
44    static public $static_const10 = array(CONST_VALUE => CONST_VALUE);
45    static public $static_const11 = array(self::CONST_VALUE => self::CONST_VALUE);
46    static public $static_const12 = array(ClassName::CONST_VALUE => ClassName::CONST_VALUE);
47    /** doc */
48    static public $public_static = array(2, 'str');
49    /** doc */
50    static private $private_static = array(2, 'str');
51    static private $private_static2 = array(self::CONST_VALUE => self::CONST_VALUE);
52    /** doc */
53    static protected $protected_static = array(2, 'str');
54    static protected $protected_static2 = array(self::CONST_VALUE => self::CONST_VALUE);
55    /** doc */
56    public $property = array(
57        array('array'),
58        'str'
59        );
60    /** doc */
61    public $public_property = array(2, 'str');
62    /** doc */
63    private $private_property = array(2, 'str');
64    /** doc */
65    protected $protected_property = array(2, 'str');
66    public $array = array();
67#else
68    var $property = array(
69        array('array'),
70        'str'
71        );
72#endif
73
74#if PHP_VERSION >= 500
75    /** doc */
76#endif
77    PublicMethod function f1()
78    {
79    }
80
81    PublicMethod function f2()
82    {
83    }
84
85    PublicMethod function __construct($arg1, $arg2)
86    {
87        static $array = array(
88            0           => array('array'),
89            1           => 'str',
90            CONST_VALUE => CONST_VALUE
91            );
92        static $static = 1;
93        static $str = 'string';
94        echo CONST_VALUE;
95#if PHP_VERSION >= 500
96        echo ClassName::CONST_VALUE;
97        empty(ClassName::$classProp);
98        isset(ClassName::$classProp);
99        ClassName::$classProp = 1;
100        echo ClassName::$classProp;
101#endif
102        $object = $this;
103        $object->a = 1;
104        $object->b = 2;
105        $object->prop = 'prop';
106        empty($object->objProp);
107        isset($object->objProp);
108#if PHP_VERSION >= 500
109        unset($object->objProp);
110#endif
111        $object->objProp = 1;
112        echo $object->objProp;
113        empty($this->thisProp);
114        isset($this->thisProp);
115#if PHP_VERSION >= 500
116        unset($this->thisProp);
117#endif
118        $this->thisProp = 1;
119        echo $this->thisProp;
120#if PHP_VERSION >= 500
121        unset($array['index']->valueProp);
122#endif
123        unset($object->array['index']);
124        unset($this->array['index']);
125        empty($_GET['get']);
126        isset($_GET['get']);
127        unset($_GET['get']);
128        $_GET['get'] = 1;
129        echo $_GET['get'];
130        isset($GLOBALS['global']);
131        empty($GLOBALS['global']);
132        unset($GLOBALS['global']);
133        $GLOBALS['global'] = 1;
134        echo $GLOBALS['global'];
135        empty($array['index']);
136        isset($array['index']);
137        unset($array['index']);
138        $array['index'] = 1;
139        echo $array['index'];
140        empty($array['index']->indexProp);
141        isset($array['index']->indexProp);
142#if PHP_VERSION >= 500
143        unset($array['index']->indexProp);
144#endif
145        $array['index'] = $object;
146        $array['index']->indexProp = 1;
147        echo $array['index']->indexProp;
148        $GLOBALS['var'] = $object;
149        empty($GLOBALS['var']->indexProp);
150        isset($GLOBALS['var']->indexProp);
151#if PHP_VERSION >= 500
152        unset($GLOBALS['var']->indexProp);
153#endif
154        $GLOBALS['var']->indexProp = 1;
155        echo $GLOBALS['var']->indexProp;
156
157        if (0) {
158            ClassName::__construct();
159        }
160
161        $method = 'method';
162        ClassName::$method();
163        echo __CLASS__;
164        echo __METHOD__;
165        echo __FUNCTION__;
166        $this->method();
167#if PHP_VERSION >= 500
168        try {
169            throw new _Exception();
170            new _Exception();
171        }
172        catch (_Exception $e) {
173        }
174#endif
175
176        $a = 1;
177        $b = $c = 2;
178        $a = $b + $c;
179        $a = $b + 1;
180        $a = 1 + $b;
181        $a = $b - $c;
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;
191        $a = -$b;
192        $a = +$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++;
202        $a = ++$b;
203        $a = $object->b++;
204        $a = ++$object->b;
205        $a = $b--;
206        $a = --$b;
207        $a = $object->b--;
208        $a = --$object->b;
209        $a = !$b;
210        $a = $b === $c;
211        $a = $b !== $c;
212        $a = $b << 2;
213        $a = $b >> 3;
214        $a += $b;
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 = 'a' . 'b';
226        $a = 'a' . 'abc';
227        @f1();
228        print('1');
229        $array = array('index' => 1);
230        $a = $array['index'];
231        $a = $object->prop;
232        $a = $this->prop;
233        $array['index'] = 1;
234        $object->prop = 1;
235        $this->prop = 1;
236        $a = isset($b);
237        $a = empty($b);
238        unset($b);
239        $b = 1;
240        $a = isset($array['index']);
241        $a = empty($array['index']);
242        unset($array['index']);
243        $a = isset($object->prop);
244        $a = empty($object->prop);
245#if PHP_VERSION >= 500
246        unset($object->prop);
247#endif
248        $a = isset($this->prop);
249        $a = empty($this->prop);
250#if PHP_VERSION >= 500
251        unset($this->prop);
252        $a = isset(ClassName::$prop);
253        $a = empty(ClassName::$prop);
254#endif
255        $a = (int) $b;
256        $a = (double) $b;
257        $a = (string) $b;
258        $a = (array) $b;
259        $a = (object) $b;
260        $a = (bool) $b;
261        $a = (unset) $b;
262        $a = (array) $b;
263        $a = (object) $b;
264        $a = ($b ? $c : $d);
265        $a = (f1() ? f2() : f3());
266        ($a = $b) xor $c;
267        ($a = $b) and $c;
268        ($a = $b) or $c;
269        $a = $b && $c;
270        $a = $b || $c;
271#if PHP_VERSION >= 530
272        echo $this::CONST_VALUE;
273        echo $object::CONST_VALUE;
274        echo CONST_VALUE;
275        $this::method();
276        $object::method();
277        $a = $b ?: $d;
278        $a = ($b ?: $d) + $c;
279        $a = f1() ?: f2();
280        $a = ClassName::f1() ?: ClassName::f2();
281        $a = ($b ? $c : $d);
282        $a = ($b ? $c : $d) + $c;
283        $a = (f1() ? f3() : f2());
284
285        if ($b ?: $d) {
286            echo 'if ($b ?: $d)';
287        }
288
289        if (($b ?: $d) + $c) {
290            echo 'if (($b ?: $d) + $c)';
291        }
292
293        if (f1() ?: f2()) {
294            echo 'if (f1() ?: f2())';
295        }
296#endif
297    }
298
299    public function __destruct()
300    {
301    }
302#if PHP_VERSION >= 500
303
304    /** doc */
305    abstract public function abstractMethod();
306#endif
307
308#if PHP_VERSION >= 500
309    /** doc */
310#endif
311    PublicMethod function method($a = NULL, $b = NULL)
312    {
313    }
314#if PHP_VERSION >= 500
315
316    /** doc */
317    protected function protectedMethod(ClassName $a, $b = array(
318            array('array')
319            ))
320    {
321        $runtimeArray = array('1');
322        $runtimeArray2 = array(
323            '1',
324            array()
325            );
326        $runtimeArray3 = array(
327            'a' => '1',
328            2   => array()
329            );
330        return 'protected';
331    }
332
333    /** doc */
334    private function privateMethod(ClassName $a, $b = NULL)
335    {
336        return 'private';
337    }
338#endif
339}
340#if PHP_VERSION >= 500
341
342interface IInterface
343{
344    public function nothing();
345}
346#endif
347
348function f1()
349{
350}
351
352function f2()
353{
354}
355
356function f3()
357{
358}
359
360function generator($f)
361{
362    echo __FUNCTION__;
363    echo $f;
364#if PHP_VERSION >= 550
365
366    foreach ($a as $b) {
367        yield $b;
368    }
369
370    yield f1($b);
371#endif
372}
373#if PHP_VERSION >= 500
374
375final class Child extends ClassName implements IInterface
376{
377    public function __construct()
378    {
379        parent::__construct('a', 'b');
380    }
381
382    public function __destruct()
383    {
384        parent::__destruct();
385    }
386
387    static public function __callStatic($name, $args)
388    {
389        parent::__callStatic($name, $args);
390    }
391
392    public function abstractMethod()
393    {
394    }
395
396    public function nothing()
397    {
398    }
399
400    public function __toString()
401    {
402        parent::__toString();
403    }
404
405    public function __set($name, $value)
406    {
407    }
408
409    public function __get($name)
410    {
411    }
412
413    public function __isset($name)
414    {
415    }
416
417    public function __unset($name)
418    {
419    }
420
421    public function __sleep()
422    {
423    }
424
425    public function __wakeup()
426    {
427    }
428
429    public function __clone()
430    {
431        return array();
432    }
433}
434#endif
435
436define('CONST_VALUE', 'const value');
437$late = isset($_ENV['LATE']);
438
439if ($late) {
440    class LateBindingClass
441    {
442        PublicMethod function __construct()
443        {
444        }
445    }
446
447    function lateBindingFunction($arg)
448    {
449        echo 'lateFunction';
450        return new lateBindingFunction();
451    }
452}
453
454echo "\r\n";
455echo "\r";
456echo "\n";
457var_dump(array('a' => 'a', 'b' => 'c'), 'b');
458$object = new Child();
459$className = 'ns\\Child';
460$object = new $className();
461#if PHP_VERSION >= 500
462$result = $object instanceof Child;
463$cloned = clone $object;
464#endif
465#if PHP_VERSION >= 500
466
467do {
468    try {
469        echo 'outer try 1';
470
471        try {
472            echo 'inner try';
473        }
474        catch (InnerException $e) {
475            echo $e;
476        }
477        catch (InnerException2 $e2) {
478            echo $e2;
479        }
480#if PHP_VERSION >= 550
481        finally {
482            echo 'inner finally';
483        }
484#endif
485
486        echo 'outer try 2';
487    }
488    catch (OuterException $e) {
489        echo $e;
490    }
491    catch (OuterException2 $e2) {
492        echo $e2;
493    }
494#if PHP_VERSION >= 550
495    finally {
496        echo 'outer finally';
497    }
498#endif
499} while (0);
500#endif
501
502if ('if()') {
503    echo 'if';
504
505    if ('innerIf()') {
506        echo 'if innerIf';
507    }
508}
509else if ('elseif_()') {
510    echo 'else if';
511
512    if ('innerIf_()') {
513        echo 'if innerIf';
514    }
515}
516else {
517    if ('innerIf_()') {
518        echo 'if innerIf';
519    }
520
521    echo 'else';
522}
523
524while (false) {
525    echo 'while';
526}
527
528do {
529    echo 'do/while';
530} while (false);
531
532$i = 1;
533
534for (; $i < 10; ++$i) {
535    echo $i;
536    break;
537}
538
539$array = array(
540        array('a' => 'b')
541        );
542foreach ($array as $value) {
543    foreach ($value as $key => $value) {
544        echo $key . ' = ' . $value . "\n";
545        break 2;
546        continue;
547    }
548}
549
550switch ('$normalSwitch') {
551case 'case1':
552    echo 'case1';
553
554    switch ('$nestedSwitch') {
555    case 1:
556    }
557
558    break;
559
560case 'case2':
561    echo 'case2';
562    break;
563
564default:
565    switch ('$nestedSwitch') {
566    case 1:
567    }
568
569    echo 'default';
570    break;
571}
572
573switch ('$switchWithoutDefault') {
574case 'case1':
575    echo 'case1';
576    break;
577
578case 'case2':
579    echo 'case2';
580    break;
581}
582
583switch ('$switchWithMiddleDefault') {
584case 'case1':
585    echo 'case1';
586    break;
587
588default:
589    echo 'default';
590    break;
591
592case 'case2':
593    echo 'case2';
594    break;
595}
596
597switch ('$switchWithInitialDefault') {
598default:
599    echo 'default';
600    break;
601
602case 'case1':
603    echo 'case1';
604    break;
605
606case 'case2':
607    echo 'case2';
608    break;
609}
610
611switch ('emptySwitch()') {
612}
613
614switch ('defaultSwitch()') {
615default:
616}
617
618declare (ticks=1) {
619    echo 1;
620}
621
622$a = true;
623while ($a) {
624    declare (ticks=1) {
625        echo 2;
626    }
627    $a = false;
628}
629
630require 'require.php';
631require_once 'require_once.php';
632include 'include.php';
633include_once 'include_once.php';
634echo __FILE__;
635echo __LINE__;
636#if PHP_VERSION >= 530
637echo 'goto a';
638goto a;
639
640$i = 1;
641
642for (; $i <= 2; ++$i) {
643    goto a;
644}
645
646a:
647echo 'label a';
648echo preg_replace_callback('~-([a-z])~', function($match) {
649    return strtoupper($match[1]);
650}, 'hello-world');
651$greet = function($name) {
652    printf('Hello %s' . "\r\n" . '', $name);
653};
654$greet('World');
655$greet('PHP');
656$total = 0;
657$tax = 1;
658$callback = function($quantity, $product) use($tax, &$total) {
659    $tax = 'tax';
660    static $static1 = array(1);
661    static $static2;
662    $tax = 'tax';
663    $tax = --$tax;
664    $pricePerItem = constant('PRICE_' . strtoupper($product));
665    $total += $pricePerItem * $quantity * ($tax + 1);
666};
667#endif
668exit();
669
670?>
Note: See TracBrowser for help on using the repository browser.