1--TEST--
2Test xml_set_element_handler handlers as trampoline callback
3--EXTENSIONS--
4xml
5--FILE--
6<?php
7
8class TrampolineTest {
9    public function __call(string $name, array $arguments) {
10        echo 'Trampoline for ', $name, PHP_EOL;
11        echo 'Tag: ', $arguments[1], PHP_EOL;
12    }
13}
14
15$o = new TrampolineTest();
16$startCallback = [$o, 'start_handler'];
17$endCallback = [$o, 'end_handler'];
18
19$xml = <<<HERE
20<a>
21  <b/>
22  <c>Text</c>
23</a>
24HERE;
25
26$parser = xml_parser_create();
27echo "2nd arg is rubbish:\n";
28try {
29    xml_set_element_handler($parser, [], $endCallback);
30} catch (\Throwable $e) {
31    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
32}
33echo "3rd arg is rubbish:\n";
34try {
35    xml_set_element_handler($parser, $startCallback, []);
36} catch (\Throwable $e) {
37    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
38}
39xml_parser_free($parser);
40
41?>
42--EXPECT--
432nd arg is rubbish:
44TypeError: xml_set_element_handler(): Argument #2 ($start_handler) must be of type callable|string|null
453rd arg is rubbish:
46TypeError: xml_set_element_handler(): Argument #2 ($start_handler) must be of type callable|string|null
47