Map object

$map = new Map(array('foo' => 'bar', 'baz' => 'quux'));
$map = $map->withDefault('strtoupper');

var_dump($map->apply(array('foo', 'baz', 'quux'))); // bar, quux, QUUX
var_dump(array_map($map, array('foo', 'baz', 'quux'))); // bar, quux, QUUX
var_dump($map['foo']); // bar
var_dump($map('quux')); // QUUX