6 use InvalidArgumentException;
7 use Wikimedia\Assert\Assert;
38 foreach (
$keys as $key ) {
39 foreach ( $sources as
$source ) {
42 $this->options[$key] =
$source->get( $key );
46 if ( array_key_exists( $key,
$source ) ) {
47 $this->options[$key] =
$source[$key];
52 throw new InvalidArgumentException(
"Key \"$key\" not found in input sources" );
63 if ( $this->keys !== $expectedKeys ) {
64 $extraKeys = array_diff( $this->keys, $expectedKeys );
65 $missingKeys = array_diff( $expectedKeys, $this->keys );
66 Assert::precondition( !$extraKeys && !$missingKeys,
69 ?
'Unsupported options passed: ' . implode(
', ', $extraKeys ) .
'!'
71 ) . ( $extraKeys && $missingKeys ?
' ' :
'' ) . (
73 ?
'Required options missing: ' . implode(
', ', $missingKeys ) .
'!'
84 public function get( $key ) {
85 if ( !array_key_exists( $key, $this->options ) ) {
86 throw new InvalidArgumentException(
"Unrecognized option \"$key\"" );
88 return $this->options[$key];