I think this can be cleaned up a bit. I'd do the following:
```php
if (empty($options)) {
    return;
}
if (!is_array($options) && !$options instanceof Traversable) {
    throw new Exception\InvalidArgumentException(/* must be array or traversable */);
}
foreach ($options as $key => $value) {
    // set options as above
}
```
This way, the bulk of the work is not in a conditional, and you're not needing to cast Traversables to an array (as you're simply iterating over them).