Wrapping the Options API

While WordPress sports its Options API to get and set site options I felt the need for something a little more object-oriented to work with and to be able, of course, to mock in tests.
I’ve put together a class that wraps the Options API into an object to allow calls like

// read the option from the database
$option = new \tad\wrappers\Option('someOption');
$theWholeOptionArray = $option->val; // ['someKey' => 'someValue']
$anOptiontey = $option->someKey; // 'someValue'

The class will load the options at __construct time and will save them back to the database at __destruct time to allow for faster and maybemore efficient reading and writing.
The class will expose the original value in the val property and will then expose key/value pairs for array options as properties, so given a property like

[
'some key' => 'some value',
'some-other-key' => 'some other value',
'some_fancy_key' => 'some more value'
]

The class will expose

$option->val            // the array with camelBack keys
$option->loadedValue    // the original array with different format keys
$option->someKey;       // 'some value'
$option->someOtherKey   // 'some other value'
$option->someFancyKey   // 'some more value'

The class uses the Arr and Str utility classes to make my life easier. An option in the __construct metod allows accessing the properties using the underscore notation

$option = new \tad\wrappers\Option('someOption', $isSiteOption = false, $underscoreNames = true);
$option->some_key;
$option->some_other_key;
$option->some_fancy_key;

The class is on Github and has been test-driven developed.