在try - catch块中使用get_class

时间:2014-11-11 12:20:23

标签: php class exception

问题

  • 是否可以在PHP中使用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
}

1 个答案:

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

然而,我真的质疑你的动机。我想不出任何可以增加功能,可读性,可扩展性或可用性的用例。