2021-04-08 08:08:59 +00:00
< ? php
/*
* This file is part of the Symfony package .
*
* ( c ) Fabien Potencier < fabien @ symfony . com >
*
* For the full copyright and license information , please view the LICENSE
* file that was distributed with this source code .
*/
namespace Symfony\Component\Debug\Exception ;
2022-12-14 15:55:13 +00:00
@ trigger_error ( sprintf ( 'The "%s" class is deprecated since Symfony 4.4, use "%s" instead.' , FatalErrorException :: class , \Symfony\Component\ErrorHandler\Error\FatalError :: class ), \E_USER_DEPRECATED );
2021-04-08 08:08:59 +00:00
/**
* Fatal Error Exception .
*
* @ author Konstanton Myakshin < koc - dp @ yandex . ru >
2022-12-14 15:55:13 +00:00
*
* @ deprecated since Symfony 4.4 , use Symfony\Component\ErrorHandler\Error\FatalError instead .
2021-04-08 08:08:59 +00:00
*/
class FatalErrorException extends \ErrorException
{
2022-12-14 15:55:13 +00:00
public function __construct ( string $message , int $code , int $severity , string $filename , int $lineno , int $traceOffset = null , bool $traceArgs = true , array $trace = null , \Throwable $previous = null )
2021-04-08 08:08:59 +00:00
{
parent :: __construct ( $message , $code , $severity , $filename , $lineno , $previous );
if ( null !== $trace ) {
if ( ! $traceArgs ) {
foreach ( $trace as & $frame ) {
unset ( $frame [ 'args' ], $frame [ 'this' ], $frame );
}
}
$this -> setTrace ( $trace );
} elseif ( null !== $traceOffset ) {
2022-12-14 15:55:13 +00:00
if ( \function_exists ( 'xdebug_get_function_stack' ) && $trace = @ xdebug_get_function_stack ()) {
2021-04-08 08:08:59 +00:00
if ( 0 < $traceOffset ) {
array_splice ( $trace , - $traceOffset );
}
foreach ( $trace as & $frame ) {
if ( ! isset ( $frame [ 'type' ])) {
// XDebug pre 2.1.1 doesn't currently set the call type key http://bugs.xdebug.org/view.php?id=695
if ( isset ( $frame [ 'class' ])) {
$frame [ 'type' ] = '::' ;
}
} elseif ( 'dynamic' === $frame [ 'type' ]) {
$frame [ 'type' ] = '->' ;
} elseif ( 'static' === $frame [ 'type' ]) {
$frame [ 'type' ] = '::' ;
}
// XDebug also has a different name for the parameters array
if ( ! $traceArgs ) {
unset ( $frame [ 'params' ], $frame [ 'args' ]);
} elseif ( isset ( $frame [ 'params' ]) && ! isset ( $frame [ 'args' ])) {
$frame [ 'args' ] = $frame [ 'params' ];
unset ( $frame [ 'params' ]);
}
}
unset ( $frame );
$trace = array_reverse ( $trace );
} else {
$trace = [];
}
$this -> setTrace ( $trace );
}
}
protected function setTrace ( $trace )
{
2022-12-14 15:55:13 +00:00
$traceReflector = new \ReflectionProperty ( \Exception :: class , 'trace' );
2021-04-08 08:08:59 +00:00
$traceReflector -> setAccessible ( true );
$traceReflector -> setValue ( $this , $trace );
}
}