source: trunk/mod_disassembler/sample.cpp.php @ 1334

Last change on this file since 1334 was 1334, checked in by moo, 15 months ago

devel: use cpp to generate samples for different php version

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