Changeset View
Changeset View
Standalone View
Standalone View
src/error/PhutilProxyException.php
- This file was added.
<?php | |||||
/** | |||||
* Prior to PHP 5.3, PHP does not support nested exceptions; this class provides | |||||
* limited support for nested exceptions. Use methods on | |||||
* @{class:PhutilErrorHandler} to unnest exceptions in a forward-compatible way. | |||||
* | |||||
* @concrete-extensible | |||||
*/ | |||||
class PhutilProxyException extends Exception { | |||||
private $previousException; | |||||
public function __construct($message, $previous, $code = 0) { | |||||
$this->previousException = $previous; | |||||
// This may be an "Exception" or a "Throwable". The "__construct()" method | |||||
// for the Exception is documented as taking an Exception, not a Throwable. | |||||
// Although passing a Throwable appears to work in PHP 7.3, don't risk it. | |||||
$is_exception = ($previous instanceof Exception); | |||||
if (version_compare(PHP_VERSION, '5.3.0', '>=') && $is_exception) { | |||||
parent::__construct($message, $code, $previous); | |||||
} else { | |||||
parent::__construct($message, $code); | |||||
} | |||||
} | |||||
public function getPreviousException() { | |||||
// NOTE: This can not be named "getPrevious()" because that method is final | |||||
// after PHP 5.3. Similarly, the property can not be named "previous" | |||||
// because HPHP declares a property with the same name and "protected" | |||||
// visibility. | |||||
return $this->previousException; | |||||
} | |||||
} |