Вопросов
get_class
метода 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 is_a, чтобы проверить, было ли исключение броска того типа, которого вы ожидаете, например:
if(is_a($e, get_class($classWhereExceptionObjectIsStored->getExceptionInstance('hi!'))){}
Тем не менее, я действительно сомневаюсь в ваших мотивах. Я не могу придумать какой-либо вариант использования, когда это добавит функциональность, читаемость, масштабируемость или удобство использования.
catch()
тогда? Потому что вы не называете тамnew
оператора.