PHP 7. Есть объект TitleMap с ArrayAccess, который по индексу возвращает объект Data. Надо написать конструкцию, которая в случае наличия индекса присвоит значение, а в случае отсутствия - бросит исключение, мол неправильное значение индекса (исключение надо бросать в клиентском коде, не залазя в сам TitleMap ).
Если в лоб, то вот:
if (!isset($this->title_map[$page_type]) {
throw new EngineError('There is no Data for this type.');
};
$data = $this->title_map[$page_type];
Но хочется что-то такое, без дублирования:
$data = $this->title_map[$page_type] ?? throw new EngineError('There is no Data for this type.');
К сожалению, такая штука не проходит парсинг. Есть еще короткие варианты? Соль в том, что проверку на нуль нельзя делать (иначе присвоил бы, а потом проверил бы на null), только isset - имплементация OffsetGet должна возвращать только Data (использованы return type hints).