在下面的代码示例中,我试图让类名Volvo显示在异常消息中,但出现的却是CarException。当抛出异常时,我如何才能在不指定__CLASS__
的情况下获得异常消息中出现的类名Volvo ?
class Volvo extends Car {
public function smash() {
throw new CarException("This car doesn't really smash.");
}
}
abstract class Car {
public function __construct() {
var_dump(get_called_class());
}
}
class CarException extends 'Exception {
public function __construct($message, $code = 0, Exception $previous = null) {
$message = get_called_class() . ": $message";
parent::__construct($message, $code, $previous);
}
}
$volvo = new Volvo();
try {
$volvo->smash();
} catch (CarException $e) {
var_dump($e->getMessage());
}
如果我没理解错的话,你是在找getTrace
:
class CarException extends 'Exception {
public function __construct($message, $code = 0, Exception $previous = null) {
$trace = $this->getTrace();
$cls = $trace[0]['class'];
$message = $cls . ": $message";
parent::__construct($message, $code, $previous);
}
}
get_called_class
在这里不适用:它返回"拥有"代码的类的名称,而不是"调用"它的类的名称。