2015-08-17 17:00:26 -07: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\HttpKernel\Exception ;
/**
* Fatal Error Exception .
*
* @ author Fabien Potencier < fabien @ symfony . com >
* @ author Konstanton Myakshin < koc - dp @ yandex . ru >
* @ author Nicolas Grekas < p @ tchwork . com >
*
* @ deprecated Deprecated in 2.3 , to be removed in 3.0 . Use the same class from the Debug component instead .
*/
class FatalErrorException extends \ErrorException
{
}
namespace Symfony\Component\Debug\Exception ;
use Symfony\Component\HttpKernel\Exception\FatalErrorException as LegacyFatalErrorException ;
/**
* Fatal Error Exception .
*
* @ author Konstanton Myakshin < koc - dp @ yandex . ru >
*/
class FatalErrorException extends LegacyFatalErrorException
{
2015-08-27 12:03:05 -07:00
public function __construct ( $message , $code , $severity , $filename , $lineno , $traceOffset = null , $traceArgs = true , array $trace = null )
2015-08-17 17:00:26 -07:00
{
parent :: __construct ( $message , $code , $severity , $filename , $lineno );
2015-08-27 12:03:05 -07:00
if ( null !== $trace ) {
if ( ! $traceArgs ) {
foreach ( $trace as & $frame ) {
unset ( $frame [ 'args' ], $frame [ 'this' ], $frame );
}
}
$this -> setTrace ( $trace );
} elseif ( null !== $traceOffset ) {
2015-08-17 17:00:26 -07:00
if ( function_exists ( 'xdebug_get_function_stack' )) {
$trace = xdebug_get_function_stack ();
if ( 0 < $traceOffset ) {
array_splice ( $trace , - $traceOffset );
}
foreach ( $trace as & $frame ) {
if ( ! isset ( $frame [ 'type' ])) {
2015-08-27 12:03:05 -07:00
// XDebug pre 2.1.1 doesn't currently set the call type key http://bugs.xdebug.org/view.php?id=695
2015-08-17 17:00:26 -07:00
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 );
} elseif ( function_exists ( 'symfony_debug_backtrace' )) {
$trace = symfony_debug_backtrace ();
if ( 0 < $traceOffset ) {
array_splice ( $trace , 0 , $traceOffset );
}
} else {
$trace = array ();
}
$this -> setTrace ( $trace );
}
}
protected function setTrace ( $trace )
{
$traceReflector = new \ReflectionProperty ( 'Exception' , 'trace' );
$traceReflector -> setAccessible ( true );
$traceReflector -> setValue ( $this , $trace );
}
}