Использование get_class в блоке try — catch

Вопросы

  • Можно ли создать экземпляр класса с 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
}

0

Решение

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!'))){}

Тем не менее, я действительно ставлю под сомнение ваши мотивы. Я не могу представить ни одного варианта использования, в котором это добавило бы функциональность, удобочитаемость, масштабируемость или удобство использования.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]