К сожалению, это невозможно сделать с помощью подсказок. Типовые подсказки могут работать только на уровне класса, интерфейса или скалярного типа .
Обычно этот шаблон достигается путем предоставления вашему классу списка «известных» констант, которые затем можно проверить либо с помощью метода того же класса, либо с помощью простой in_array
проверки, если вы сделаете список общедоступным. Таким образом, вы можете добавить в класс RestAcceptType
следующее:
public static function isValidAcceptType($type)
{
return in_array($type, [
self::xml,
self::html,
self::json,
self::text,
]);
}
Затем вы можете использовать это в верхней части вашего executeRequest
метода, используя что-то вроде:
if (!RestAcceptType::isValidAcceptType($acceptType)) {
throw new InvalidArgumentException;
}
Я ценю, что это не самый чистый шаблон (особенно потому, что это означает внесение двух изменений при добавлении новой константы), но если не использовать что-то вроде ReflectionClass::getConstants
, невозможно перебрать константы класса. По моему мнению, по крайней мере, это тоже не было бы особенно чисто (хотя именно так работает библиотека в другом ответе, так что это определенно вариант).