Buenas, aquí creo que se entra en otros detalles.
En esta línea: array_walk($this->productos, $llamadaDeRetorno); lo que diría yo que se hace es que se llama a la función array_walk, y a esta se le pasan dos parámetros: un array ($this->productos) y una función ($llamadaDeRetorno).
La función array_walk lo que hace es ejecutar la función usando el índice y valor o key y value de cada elemento del array. Además podrían incluirse otros parámetros en la llamada de array_walk, pero en este caso no lo hace.
En este ejemplo:
<?php
function myfunction($value,$key)
{
echo "The key $key has the value $value<br>";
}
$a=array("a"=>"red","b"=>"green","c"=>"blue");
array_walk($a,"myfunction");
?>
Lo que se obtiene es:
The key a has the value red
The key b has the value green
The key c has the value blue
¿Por qué? Porque al pasar un array, se está pasando indirectamente para cada elemento del array un índice o key y un value o valor.
Entonces cuando llamas esto: array_walk($this->productos, $llamadaDeRetorno);
Lo que estás diciendo es que se va a ejecutar la función llamadaDeRetorno para cada uno de los elementos del array, y en cada ejecución llamadaDeRetorno recibe dos parámetros, que son el key y el value de cada elemento del array. El key es el producto, y el value la cantidad. Por tanto la función recibe lo que necesita.
Yo por lo que veo al carro le va añadiendo productos donde el key es el nombre del producto, por ejemplo 'mantequilla' y el value es la cantidad de producto, por ejemplo 1. Así que llamadaDeRetorno está recibiendo el producto (key de cada elemento del array) y la cantidad (value de cada elemento del array).
Tener un array donde los índices son nombres es algo a lo que muchos no estamos acostumbrados, pero php lo permite.
$age = array("Peter"=>"35", "Ben"=>"37", "Joe"=>"43"); es un array asociativo (con índices nombres). También puede escribirse:
$age['Peter'] = "35";
$age['Ben'] = "37";
$age['Joe'] = "43";
Un ejemplo de uso sería:
<?php
$age = array("Peter"=>"35", "Ben"=>"37", "Joe"=>"43");
echo "Peter is " . $age['Peter'] . " years old.";
?>
Otros lenguajes no permiten esto, pero PHP sí lo permite.
En este caso
$productos['mantequilla'] = "1";
$productos['leche'] = "3";
$productos['huevos'] = "6";
Lo que indica es que en el array productos tienes tres elementos cuyas key son mantequilla, leche y huevos. Y estos elementos del array tienen como value 1, 3 y 6.
A mí particularmente no me gusta mucho este planteamiento, pero bueno, así es como parece que lo han hecho.