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

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

improve devel testing

  • 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
168#if PHP_VERSION >= 500
169        try {
170            throw new _Exception();
171            new _Exception();
172        }
173        catch (_Exception $e) {
174        }
175#endif
176
177        $a = 1;
178        $b = $c = 2;
179        $a = $b + $c;
180        $a = $b + 1;
181        $a = 1 + $b;
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 ^ $c;
191        $a = ~$b;
192        $a = -$b;
193        $a = +$b;
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 <= $c;
202        $a = $b++;
203        $a = ++$b;
204        $a = $object->b++;
205        $a = ++$object->b;
206        $a = $b--;
207        $a = --$b;
208        $a = $object->b--;
209        $a = --$object->b;
210        $a = !$b;
211        $a = $b === $c;
212        $a = $b !== $c;
213        $a = $b << 2;
214        $a = $b >> 3;
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 ^= $b;
226        $a = 'a' . 'b';
227        $a = 'a' . 'abc';
228        @f1();
229        print('1');
230        $array = array('index' => 1);
231        $a = $array['index'];
232        $a = $object->prop;
233        $a = $this->prop;
234        $array['index'] = 1;
235        $object->prop = 1;
236        $this->prop = 1;
237        $a = isset($b);
238        $a = empty($b);
239        unset($b);
240        $b = 1;
241        $a = isset($array['index']);
242        $a = empty($array['index']);
243        unset($array['index']);
244        $a = isset($object->prop);
245        $a = empty($object->prop);
246#if PHP_VERSION >= 500
247        unset($object->prop);
248#endif
249        $a = isset($this->prop);
250        $a = empty($this->prop);
251#if PHP_VERSION >= 500
252        unset($this->prop);
253        $a = isset(ClassName::$prop);
254        $a = empty(ClassName::$prop);
255#endif
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        $a = ($b ? $c : $d);
266        $a = (f1() ? f2() : f3());
267        ($a = $b) xor $c;
268        ($a = $b) and $c;
269        ($a = $b) or $c;
270        $a = $b && $c;
271        $a = $b || $c;
272#if PHP_VERSION >= 530
273        echo $this::CONST_VALUE;
274        echo $object::CONST_VALUE;
275        echo CONST_VALUE;
276        $this::method();
277        $object::method();
278        $a = $b ?: $d;
279        $a = ($b ?: $d) + $c;
280        $a = f1() ?: f2();
281        $a = ClassName::f1() ?: ClassName::f2();
282        $a = ($b ? $c : $d);
283        $a = ($b ? $c : $d) + $c;
284        $a = (f1() ? f3() : f2());
285
286        if ($b ?: $d) {
287            echo 'if ($b ?: $d)';
288        }
289
290        if (($b ?: $d) + $c) {
291            echo 'if (($b ?: $d) + $c)';
292        }
293
294        if (f1() ?: f2()) {
295            echo 'if (f1() ?: f2())';
296        }
297#endif
298    }
299
300    public function __destruct()
301    {
302    }
303#if PHP_VERSION >= 500
304
305    /** doc */
306    abstract public function abstractMethod();
307#endif
308
309#if PHP_VERSION >= 500
310    /** doc */
311#endif
312    PublicMethod function method($a = NULL, $b = NULL)
313    {
314    }
315#if PHP_VERSION >= 500
316
317    /** doc */
318    protected function protectedMethod(ClassName $a, $b = array(
319            array('array')
320            ))
321    {
322        $runtimeArray = array('1');
323        $runtimeArray2 = array(
324            '1',
325            array()
326            );
327        $runtimeArray3 = array(
328            'a' => '1',
329            2   => array()
330            );
331        return 'protected';
332    }
333
334    /** doc */
335    private function privateMethod(ClassName $a, $b = NULL)
336    {
337        return 'private';
338    }
339#endif
340}
341#if PHP_VERSION >= 500
342
343interface IInterface
344{
345    public function nothing();
346}
347#endif
348
349function f1()
350{
351}
352
353function f2()
354{
355}
356
357function f3()
358{
359}
360
361function generator($f)
362{
363    echo __FUNCTION__;
364    echo $f;
365#if PHP_VERSION >= 550
366
367    foreach ($a as $b) {
368        yield $b;
369    }
370
371    yield f1($b);
372#endif
373}
374#if PHP_VERSION >= 500
375
376final class Child extends ClassName implements IInterface
377{
378    public function __construct()
379    {
380        parent::__construct('a', 'b');
381    }
382
383    public function __destruct()
384    {
385        parent::__destruct();
386    }
387
388    static public function __callStatic($name, $args)
389    {
390        parent::__callStatic($name, $args);
391    }
392
393    public function abstractMethod()
394    {
395    }
396
397    public function nothing()
398    {
399    }
400
401    public function __toString()
402    {
403        parent::__toString();
404    }
405
406    public function __set($name, $value)
407    {
408    }
409
410    public function __get($name)
411    {
412    }
413
414    public function __isset($name)
415    {
416    }
417
418    public function __unset($name)
419    {
420    }
421
422    public function __sleep()
423    {
424    }
425
426    public function __wakeup()
427    {
428    }
429
430    public function __clone()
431    {
432        return array();
433    }
434}
435#endif
436
437define('CONST_VALUE', 'const value');
438$late = isset($_ENV['LATE']);
439
440if ($late) {
441    class LateBindingClass
442    {
443        PublicMethod function __construct()
444        {
445        }
446    }
447
448    function lateBindingFunction($arg)
449    {
450        echo 'lateFunction';
451        return new lateBindingFunction();
452    }
453}
454
455echo "\r\n";
456echo "\r";
457echo "\n";
458var_dump(array('a' => 'a', 'b' => 'c'), 'b');
459$object = new Child();
460$className = 'ns\\Child';
461$object = new $className();
462#if PHP_VERSION >= 500
463$result = $object instanceof Child;
464$cloned = clone $object;
465#endif
466#if PHP_VERSION >= 500
467
468do {
469    try {
470        echo 'outer try 1';
471
472        try {
473            echo 'inner try';
474        }
475        catch (InnerException $e) {
476            echo $e;
477        }
478        catch (InnerException2 $e2) {
479            echo $e2;
480        }
481#if PHP_VERSION >= 550
482        finally {
483            echo 'inner finally';
484        }
485#endif
486
487        echo 'outer try 2';
488    }
489    catch (OuterException $e) {
490        echo $e;
491    }
492    catch (OuterException2 $e2) {
493        echo $e2;
494    }
495#if PHP_VERSION >= 550
496    finally {
497        echo 'outer finally';
498    }
499#endif
500} while (0);
501#endif
502
503if ('if()') {
504    echo 'if';
505
506    if ('innerIf()') {
507        echo 'if innerIf';
508    }
509}
510else if ('elseif_()') {
511    echo 'else if';
512
513    if ('innerIf_()') {
514        echo 'if innerIf';
515    }
516}
517else {
518    if ('innerIf_()') {
519        echo 'if innerIf';
520    }
521
522    echo 'else';
523}
524
525while (false) {
526    echo 'while';
527}
528
529do {
530    echo 'do/while';
531} while (false);
532
533$i = 1;
534
535for (; $i < 10; ++$i) {
536    echo $i;
537    break;
538}
539
540$array = array(
541    array('a' => 'b')
542    );
543
544foreach ($array as $value) {
545    foreach ($value as $key => $value) {
546        echo $key . ' = ' . $value . "\n";
547        break 2;
548        continue;
549    }
550}
551
552switch ('$normalSwitch') {
553case 'case1':
554    echo 'case1';
555
556    switch ('$nestedSwitch') {
557    case 1:
558    }
559
560    break;
561
562case 'case2':
563    echo 'case2';
564    break;
565
566default:
567    switch ('$nestedSwitch') {
568    case 1:
569    }
570
571    echo 'default';
572    break;
573}
574
575switch ('$switchWithoutDefault') {
576case 'case1':
577    echo 'case1';
578    break;
579
580case 'case2':
581    echo 'case2';
582    break;
583}
584
585switch ('$switchWithMiddleDefault') {
586case 'case1':
587    echo 'case1';
588    break;
589
590default:
591    echo 'default';
592    break;
593
594case 'case2':
595    echo 'case2';
596    break;
597}
598
599switch ('$switchWithInitialDefault') {
600default:
601    echo 'default';
602    break;
603
604case 'case1':
605    echo 'case1';
606    break;
607
608case 'case2':
609    echo 'case2';
610    break;
611}
612
613switch ('emptySwitch()') {
614}
615
616switch ('defaultSwitch()') {
617default:
618}
619
620declare (ticks=1) {
621    echo 1;
622}
623
624$a = true;
625
626while ($a) {
627    declare (ticks=1) {
628        echo 2;
629    }
630
631    $a = false;
632}
633
634require 'require.php';
635require_once 'require_once.php';
636include 'include.php';
637include_once 'include_once.php';
638echo __FILE__;
639echo __LINE__;
640#if PHP_VERSION >= 530
641echo 'goto a';
642goto a;
643
644$i = 1;
645
646for (; $i <= 2; ++$i) {
647    goto a;
648}
649
650a:
651echo 'label a';
652echo preg_replace_callback('~-([a-z])~', function($match) {
653    return strtoupper($match[1]);
654}, 'hello-world');
655$greet = function($name) {
656    printf('Hello %s' . "\r\n" . '', $name);
657};
658$greet('World');
659$greet('PHP');
660$total = 0;
661$tax = 1;
662$callback = function($quantity, $product) use($tax, &$total) {
663    $tax = 'tax';
664    static $static1 = array(1);
665    static $static2;
666    $tax = 'tax';
667    $tax = --$tax;
668    $pricePerItem = constant('PRICE_' . strtoupper($product));
669    $total += $pricePerItem * $quantity * ($tax + 1);
670};
671#endif
672exit();
673
674?>
Note: See TracBrowser for help on using the repository browser.