问题
get_class
方法实例化一个类?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 :(得分:1)
get_class只返回类的名称,即该函数的使用。您可以通过执行以下操作动态实例化一个类:
new $class();
在你的情况下可能会产生类似的结果:
new get_class($classWhereExceptionObjectIsStored->getExceptionInstance('hi!'));
这在catch块中不起作用。那是因为你没有在catch块中实例化任何东西 - 你唯一指定的是你期望获得的异常类。
另一种方法是捕获所有例外情况:
catch(Exception $e){}
然后在该catch中使用PHP函数is_a来检查抛出的异常是否属于您期望的类型,如下所示:
if(is_a($e, get_class($classWhereExceptionObjectIsStored->getExceptionInstance('hi!'))){}
然而,我真的质疑你的动机。我想不出任何可以增加功能,可读性,可扩展性或可用性的用例。