code: public function setValue($desired)
      {
          $achieved = array();
          foreach ($desired as $value) {
              $success = false;
              for ($i = 0, $count = count($this->options); $i < $count; $i++) {
                  if ($this->options[$i]->isValue($value)) {
                      $achieved[] = $this->options[$i]->getValue();
                      $success    = true;
                      break;
                  }
              }
              if (! $success) {
                  return false;
              }
          }
          $this->values = $achieved;
  
          return true;
      }
docs: Can only set allowed values.
  Any illegal value will result in a failure, but all correct values will be set.
  
  @param array $desired      New choices.
  
  @return bool            True if all allowed.