In addition I see no reason for $cache being protected - I'd declare it private