File: dynamic_class_const_fetch.phpt

package info (click to toggle)
php8.4 8.4.11-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 208,108 kB
  • sloc: ansic: 1,060,628; php: 35,345; sh: 11,866; cpp: 7,201; pascal: 4,913; javascript: 3,091; asm: 2,810; yacc: 2,411; makefile: 689; xml: 446; python: 301; awk: 148
file content (64 lines) | stat: -rw-r--r-- 1,618 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
--TEST--
Dynamic class constant fetch
--FILE--
<?php

class Foo {
    public const BAR = 'bar';
}

function test($code) {
    try {
        var_dump(eval($code));
    } catch (Throwable $e) {
        echo $e->getMessage(), "\n";
    }
}

$const_names = [
    ['', '"BAR"'],
    ['$bar = "BAR";', '$bar'],
    ['$ba = "BA"; $r = "R";', '$ba . $r'],
    ['', 'strtoupper("bar")'],
    ['', '$barr'],
    ['$bar = "BAR"; $barRef = &$bar;', '$barRef'],
    ['', 'strtolower("CLASS")'],
    ['', '42'],
    ['$bar = 42;', '$bar'],
    ['', '[]'],
    ['$bar = [];', '$bar'],
];

foreach ($const_names as [$prolog, $const_name]) {
    test("$prolog return Foo::{{$const_name}};");
    test("\$foo = 'Foo'; $prolog return \$foo::{{$const_name}};");
}

?>
--EXPECTF--
string(3) "bar"
string(3) "bar"
string(3) "bar"
string(3) "bar"
string(3) "bar"
string(3) "bar"
string(3) "bar"
string(3) "bar"

Warning: Undefined variable $barr in %s : eval()'d code on line %d
Cannot use value of type null as class constant name

Warning: Undefined variable $barr in %s : eval()'d code on line %d
Cannot use value of type null as class constant name
string(3) "bar"
string(3) "bar"
string(3) "Foo"
string(3) "Foo"
Cannot use value of type int as class constant name
Cannot use value of type int as class constant name
Cannot use value of type int as class constant name
Cannot use value of type int as class constant name
Cannot use value of type array as class constant name
Cannot use value of type array as class constant name
Cannot use value of type array as class constant name
Cannot use value of type array as class constant name