source: trunk/devel/sample.cpp.php

Last change on this file was 1489, checked in by moo, 3 months ago

fix build for pre-5.6

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