object(EuropeanMeals)#1 (2) { ["storedEnglishMealIterator":"EuropeanMeals":private]=> object(EnglishMealIterator)#2 (2) { ["pos":"EnglishMealIterator":private]=> int(0) ["myContent":"EnglishMealIterator":private]=> array(3) { [0]=> string(9) "breakfast" [1]=> string(6) "dinner" [2]=> string(3) "tea" } } ["storedFrenchMealIterator":"EuropeanMeals":private]=> object(FrenchMealIterator)#3 (2) { ["pos":"FrenchMealIterator":private]=> int(0) ["myContent":"FrenchMealIterator":private]=> array(4) { [0]=> string(14) "petit dejeuner" [1]=> string(8) "dejeuner" [2]=> string(6) "gouter" [3]=> string(6) "dinner" } } } -----( Simple iteration 1: )----- --> EuropeanMeals::getIterator --> EnglishMealIterator::rewind (0) --> EnglishMealIterator::valid (0) --> EnglishMealIterator::current (0) --> EnglishMealIterator::key (0) meal 0 => breakfast --> EnglishMealIterator::next (0) --> EnglishMealIterator::valid (1) --> EnglishMealIterator::current (1) --> EnglishMealIterator::key (1) meal 1 => dinner --> EnglishMealIterator::next (1) --> EnglishMealIterator::valid (2) --> EnglishMealIterator::current (2) --> EnglishMealIterator::key (2) meal 2 => tea --> EnglishMealIterator::next (2) --> EnglishMealIterator::valid (3) -----( Simple iteration 2: )----- --> EuropeanMeals::getIterator --> FrenchMealIterator::rewind (0) --> FrenchMealIterator::valid (0) --> FrenchMealIterator::current (0) --> FrenchMealIterator::key (0) meal 0 => petit dejeuner --> FrenchMealIterator::next (0) --> FrenchMealIterator::valid (1) --> FrenchMealIterator::current (1) --> FrenchMealIterator::key (1) meal 1 => dejeuner --> FrenchMealIterator::next (1) --> FrenchMealIterator::valid (2) --> FrenchMealIterator::current (2) --> FrenchMealIterator::key (2) meal 2 => gouter --> FrenchMealIterator::next (2) --> FrenchMealIterator::valid (3) --> FrenchMealIterator::current (3) --> FrenchMealIterator::key (3) meal 3 => dinner --> FrenchMealIterator::next (3) --> FrenchMealIterator::valid (4) -----( Nested iteration: )----- --> EuropeanMeals::getIterator --> EnglishMealIterator::rewind (3) --> EnglishMealIterator::valid (0) --> EnglishMealIterator::current (0) --> EnglishMealIterator::key (0) Top level 1: meal 0 => breakfast --> EuropeanMeals::getIterator --> FrenchMealIterator::rewind (4) --> FrenchMealIterator::valid (0) --> FrenchMealIterator::current (0) --> FrenchMealIterator::key (0) meal 0 => petit dejeuner --> FrenchMealIterator::next (0) --> FrenchMealIterator::valid (1) --> FrenchMealIterator::current (1) --> FrenchMealIterator::key (1) meal 1 => dejeuner --> FrenchMealIterator::next (1) --> FrenchMealIterator::valid (2) --> FrenchMealIterator::current (2) --> FrenchMealIterator::key (2) meal 2 => gouter --> FrenchMealIterator::next (2) --> FrenchMealIterator::valid (3) --> FrenchMealIterator::current (3) --> FrenchMealIterator::key (3) meal 3 => dinner --> FrenchMealIterator::next (3) --> FrenchMealIterator::valid (4) --> EnglishMealIterator::next (0) --> EnglishMealIterator::valid (1) --> EnglishMealIterator::current (1) --> EnglishMealIterator::key (1) Top level 2: meal 1 => dinner --> EuropeanMeals::getIterator --> EnglishMealIterator::rewind (1) --> EnglishMealIterator::valid (0) --> EnglishMealIterator::current (0) --> EnglishMealIterator::key (0) meal 0 => breakfast --> EnglishMealIterator::next (0) --> EnglishMealIterator::valid (1) --> EnglishMealIterator::current (1) --> EnglishMealIterator::key (1) meal 1 => dinner --> EnglishMealIterator::next (1) --> EnglishMealIterator::valid (2) --> EnglishMealIterator::current (2) --> EnglishMealIterator::key (2) meal 2 => tea --> EnglishMealIterator::next (2) --> EnglishMealIterator::valid (3) --> EnglishMealIterator::next (3) --> EnglishMealIterator::valid (4)