Natrafiłem dziś na dość dziwne zachowanie array_walk_recursive, mam nadzieję że ktoś mądrzejszy mnie oświeci co jest tu grane

Generalnie chciałem napisać funkcję sumującą wszystkie elementy wielowymiarowej tablicy.
Mam np. taką tablicę:
1, 2, 19, 1);
I początkowo napisałem takie coś:
$sum = 0; array_walk_recursive($a, function($val, $key, &$sum) { $sum += $val; }, $sum);
Rezultat okazał się, delikatnie mówiąc, zaskakujący:
1 3 22 37 57 34 74 84 104 105 107 110 114 97 23 wynik: 0
Z powyższego wynika, że array_walk_recursive przy napotkaniu kolejnej tablicy przekazuje wcześniej obliczony parametr $sum dalej co jest jak najbardziej właściwym zachowaniem. Problem w tym, że jak "wychodzi" z danej tablicy i "wchodzi" do kolejnej na tym samym poziomie zagnieżdżenia, to przekazuje ten sam $sum, co do pierwszej tablicy. Ciężko to opisać, ale jak się przyjrzycie to zrozumiecie o co mi chodzi



Druga sprawa to: "wynik:0". No właśnie, dlaczego? Przecież parametr $sum przekazywany jest do funkcji przez referencję, więc teoretycznie obie zmienne odwołują się do tej samej zmiennej. Poza tym widać wyraźnie, że parametr $sum jest modyfikowany podczas wykonywania array_walk_recursive, a mimo to na końcu ma on nadal wartość "0".
Generalnie problem rozwiązałem w ten sposób:
$sum = 0; array_walk_recursive($a, function($val, $key) use(&$sum) { $sum += $val; });
Jednak interesuje mnie to arcydziwne zachowanie funkcji w pierwszym przykładzie. Czy faktycznie jest tak późno, że nie widzę czegoś oczywistego?
