Php 在try-catch块中使用get_类
问题Php 在try-catch块中使用get_类,php,class,exception,Php,Class,Exception,问题 是否可以在PHP中用get\u class方法实例化一个类 是否可以使用get_class进入catch()块来捕获该类型错误的异常 我自己的尝试 $class = get_class($classWhereExceptionObjectIsStored->getExceptionInstance('hi!')); try { //Some code } catch($class $e)) { //Do stuff with the exception } 无论
- 是否可以在PHP中用
方法实例化一个类get\u class
- 是否可以使用
进入get_class
块来捕获该类型错误的异常catch()
$class = get_class($classWhereExceptionObjectIsStored->getExceptionInstance('hi!'));
try {
//Some code
} catch($class $e)) {
//Do stuff with the exception
}
无论何时使用get\u类
,它都会以字符串形式返回类名。当我尝试像这样实例化它时:
$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
}
只返回类的名称,这就是该函数的用法。可以通过执行以下操作动态实例化类:
new $class();
在您的情况下,可能会导致以下情况:
new get_class($classWhereExceptionObjectIsStored->getExceptionInstance('hi!'));
这在抓块中不起作用。这是因为您没有实例化catch块中的任何内容—您在其中指定的唯一内容是您期望得到的异常类
另一种方法是捕获所有异常:
catch(Exception $e){}
然后在该捕获中,使用PHP函数检查抛出的异常是否属于您期望的类型,如下所示:
if(is_a($e, get_class($classWhereExceptionObjectIsStored->getExceptionInstance('hi!'))){}
然而,我真的怀疑你的动机。我想不出任何用例会增加功能性、可读性、可伸缩性或可用性。我只是环顾了一些函数,想出了一个想法:)但是我该如何在
catch()
块中使用它呢?因为你没有在那里呼叫新的操作员。没有。(评论太短,无法发布)但如果我只捕获了捕获(例外$e)
,那会有那么糟糕吗?我猜是一样的?这实际上取决于您的目的,使用该子句捕获所有异常是否不好。我很难理解你的确切情况;通常知道将抛出哪些异常(类型)。你可以按照正确的层次顺序捕捉它们,对吗?如果您将要收到的异常总是一个惊喜,则说明您的设计有问题。不,我正确地维护了我的异常,并且我知道要接收哪个异常。它们都是异常
对象的“子对象”