gpt4 book ai didi

php - Symfony2 异常类,为什么要使用 throw new $class?

转载 作者:搜寻专家 更新时间:2023-10-31 21:14:19 25 4
gpt4 key购买 nike

我正在查看 Symfony2 类,我发现了类似这样的东西

try {
return $this->parseSelectorGroup($stream);
} catch (\Exception $e) {
$class = get_class($e);

throw new $class(sprintf('%s at %s -> %s', $e->getMessage(), implode($stream->getUsed(), ''), $stream->peek()), 0, $e);
}

他们为什么使用

        $class = get_class($e);

throw new $class

这样的语法。这样做的目的是什么?

最佳答案

我不是那行代码的原作者,所以我只能假设为什么这样做。

如代码所示,异常的标准消息正在使用字符串处理类的附加信息进行扩展(getUsed,peek - 听起来像流缓冲区/解析器/扫描器/peeker)。

消息被编辑,然后抛出同一个类的新对象。

通常:当您在变量中有一个类名并且想要创建该类的一个新实例时,您可以简单地使用:

$className = "ClassName";
$instance = new $className();

这是用捕获的异常类名完成的,参见 get_class .

进一步注意:这段代码在概念上是错误的,因为它使用了一个带有未定义接口(interface)的类作为它的构造函数。然后它在不知道其构造函数的任何信息的情况下使用构造函数。

可能隐藏了一些信息,表明这种情况预计不会发生。所以这只是一个进一步的说明。你应该有具体的理由去做这样的事情,所以这样做是有原因的,并且可能有一些设计决定没有被你发布的一些代码行记录下来。所以要小心处理。

关于php - Symfony2 异常类,为什么要使用 throw new $class?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12465176/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com