File: json_encode.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 (65 lines) | stat: -rw-r--r-- 1,238 bytes parent folder | download | duplicates (3)
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
65
--TEST--
Enum in json_encode
--FILE--
<?php

enum Foo {
    case Bar;
}

enum IntFoo: int {
    case Bar = 0;
}

enum StringFoo: string {
    case Bar = 'Bar';
}

enum CustomFoo implements JsonSerializable {
    case Bar;

    public function jsonSerialize(): mixed {
        return 'Custom ' . $this->name;
    }
}

function test($value) {
    var_dump(json_encode($value));
    echo json_last_error_msg() . "\n";
    if (json_last_error() !== JSON_ERROR_NONE) {
        echo json_last_error() . ' === '  . JSON_ERROR_NON_BACKED_ENUM . ":\n";
        var_dump(json_last_error() === JSON_ERROR_NON_BACKED_ENUM);
    }

    try {
        var_dump(json_encode($value, JSON_THROW_ON_ERROR));
        echo json_last_error_msg() . "\n";
    } catch (Exception $e) {
        echo get_class($e) . ': ' . $e->getMessage() . "\n";
    }
}

test(Foo::Bar);
test(IntFoo::Bar);
test(StringFoo::Bar);
test(CustomFoo::Bar);

?>
--EXPECT--
bool(false)
Non-backed enums have no default serialization
11 === 11:
bool(true)
JsonException: Non-backed enums have no default serialization
string(1) "0"
No error
string(1) "0"
No error
string(5) ""Bar""
No error
string(5) ""Bar""
No error
string(12) ""Custom Bar""
No error
string(12) ""Custom Bar""
No error