Symfony2 Exception类,为什么要使用throw new class?

I'm looking at Symfony2 classes and I found something like this

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);
        }

Why they use

        $class = get_class($e);

        throw new $class

such syntax. What is the purpose of that?

I'm not the original author of that line of code so I can only assume why this was done.

As the code shows, the standard message of the exception is being extended with additional information of the string handling class (getUsed, peek - sounds like a stream buffer/parser/scanner/peeker).

The Message is edited and then a new object of the same class is being thrown.

Generally: When you have a class name in a variable and want to create a new instance of that class, you can simply use:

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

This is done here with the catched exceptions classname, see get_class.

Further Note: This code is conceptually broken because it uses a class with an undefined interface for it's constructor. It then makes use of the constructor function without knowing anything about it's constructor.

There might be some information hidden that such a case is not to be expected to happen though. So this is merely a further note. You should have concrete reasons to do something like that, so this has been done for a reason and there might be some design decision which is not documented by the some lines of code you've posted. So handle with care.