PHP扩展异常


PHP extending exception

在下面的代码示例中,我试图让类名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在这里不适用:它返回"拥有"代码的类的名称,而不是"调用"它的类的名称。