1--TEST--
2RecursiveCallbackFilterIterator with trampoline callback
3--FILE--
4<?php
5
6function test($value, $key, $inner) {
7    if ($inner->hasChildren()) {
8        return true;
9    }
10    printf("%s / %s / %d / %d\n"
11        , print_r($value, true)
12        , $key
13        , $value == $inner->current()
14        , $key == $inner->key()
15    );
16    return $value === 1 || $value === 4;
17}
18
19class TrampolineTest {
20    public function __call(string $name, array $arguments) {
21        echo 'Trampoline for ', $name, PHP_EOL;
22        return test(...$arguments);
23    }
24}
25$o = new TrampolineTest();
26$callback = [$o, 'trampoline'];
27
28$it = new RecursiveArrayIterator([1, [2, 3], [4, 5]]);
29$it = new RecursiveCallbackFilterIterator($it, $callback);
30$it = new RecursiveIteratorIterator($it);
31
32foreach($it as $value) {
33    echo "=> $value\n";
34}
35?>
36--EXPECT--
37Trampoline for trampoline
381 / 0 / 1 / 1
39=> 1
40Trampoline for trampoline
41Trampoline for trampoline
422 / 0 / 1 / 1
43Trampoline for trampoline
443 / 1 / 1 / 1
45Trampoline for trampoline
46Trampoline for trampoline
474 / 0 / 1 / 1
48=> 4
49Trampoline for trampoline
505 / 1 / 1 / 1
51