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