Вопросы
get_class
метод в PHP?get_class
в catch()
блок, чтобы поймать исключение из этого типа ошибки?Моя собственная попытка
Всякий раз, когда используете get_class
, он возвращает имя класса в виде строки. Когда я попытался создать его так:
$classWhereExceptionObjectIsStored = new classWhereExceptionObjectIsStored();
try {
//Some code
} catch(get_class($classWhereExceptionObjectIsStored->getExceptionObject $e)) {
//Do stuff with the exception
}
Это не сработало.
Класс:
class classWhereExceptionObjectIsStored
{
public function getExceptionObject($message) {
return new LogicException($message); //For example
}
}
Вторая попытка
$class = get_class($classWhereExceptionObjectIsStored->getExceptionInstance('hi!'));
try {
//Some code
} catch($class $e)) {
//Do stuff with the exception
}
get_class возвращает только имя класса, это использование этой функции. Вы можете создать экземпляр класса динамически, выполнив:
new $class();
Что в вашем случае, вероятно, должно привести к чему-то вроде:
new get_class($classWhereExceptionObjectIsStored->getExceptionInstance('hi!'));
Это не работает в блоке catch. Это потому, что вы ничего не создаете в блоке catch — единственное, что вы указываете, это класс исключений, который вы ожидаете получить.
Альтернативой было бы перехватить все исключения:
catch(Exception $e){}
И затем в этом улове использовать функцию PHP это чтобы проверить, является ли выброшенное исключение того типа, который вы ожидаете, вот так:
if(is_a($e, get_class($classWhereExceptionObjectIsStored->getExceptionInstance('hi!'))){}
Тем не менее, я действительно ставлю под сомнение ваши мотивы. Я не могу представить ни одного варианта использования, в котором это добавило бы функциональность, удобочитаемость, масштабируемость или удобство использования.
Других решений пока нет …