public final function __construct($options = null)
{
if (is_array($this->getDefaultOptions())) {
$defaultOptions = $templateOptions = array_merge(array('generatedBy' => null), $this->getDefaultOptions());
} else {
$defaultOptions = $templateOptions = array('generatedBy' => null);
}
$requiredOptions = $this->getRequiredOptions();
if ($requiredOptions !== null) {
if ($options === null) {
throw new MissingRequiredOptionException($requiredOptions[0]);
}
$missingRequiredOpt = array_diff($requiredOptions, array_keys($options));
if (!empty($missingRequiredOpt)) {
$missingKeys = array_values($missingRequiredOpt);
throw new MissingRequiredOptionException($missingKeys[0]);
}
$templateOptions = array_merge(array_flip($requiredOptions), $defaultOptions);
}
if (is_array($options)) {
$completeOptions = array_merge($defaultOptions, $options);
} else {
$completeOptions = $defaultOptions;
}
$offset = array_diff_key($completeOptions, $templateOptions);
if (!empty($offset)) {
$invalidKeys = array_keys($offset);
throw new InvalidOptionException($invalidKeys[0]);
}
$this->options = $completeOptions;
}