source: svn/trunk/devel/sample.cpp.php

Last change on this file was 1593, checked in by Xuefer, 2 months ago

eval requires "()"; show code for dangling array(..)

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