Файл: symfony-2.7/src/Symfony/Component/VarDumper/Caster/ExceptionCaster.php
Строк: 95
<?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 SymfonyComponentVarDumperCaster;
use SymfonyComponentVarDumperExceptionThrowingCasterException;
use SymfonyComponentVarDumperClonerStub;
/**
* Casts common Exception classes to array representation.
*
* @author Nicolas Grekas <p@tchwork.com>
*/
class ExceptionCaster
{
public static $traceArgs = true;
public static $errorTypes = array(
E_DEPRECATED => 'E_DEPRECATED',
E_USER_DEPRECATED => 'E_USER_DEPRECATED',
E_RECOVERABLE_ERROR => 'E_RECOVERABLE_ERROR',
E_ERROR => 'E_ERROR',
E_WARNING => 'E_WARNING',
E_PARSE => 'E_PARSE',
E_NOTICE => 'E_NOTICE',
E_CORE_ERROR => 'E_CORE_ERROR',
E_CORE_WARNING => 'E_CORE_WARNING',
E_COMPILE_ERROR => 'E_COMPILE_ERROR',
E_COMPILE_WARNING => 'E_COMPILE_WARNING',
E_USER_ERROR => 'E_USER_ERROR',
E_USER_WARNING => 'E_USER_WARNING',
E_USER_NOTICE => 'E_USER_NOTICE',
E_STRICT => 'E_STRICT',
);
public static function castException(Exception $e, array $a, Stub $stub, $isNested)
{
$trace = $a[" Exception trace"];
unset($a[" Exception trace"]); // Ensures the trace is always last
static::filterTrace($trace, static::$traceArgs);
if (null !== $trace) {
$a[" Exception trace"] = $trace;
}
if (empty($a[" Exception previous"])) {
unset($a[" Exception previous"]);
}
unset($a[" Exception string"], $a[" + xdebug_message"], $a[" + __destructorException"]);
return $a;
}
public static function castErrorException(ErrorException $e, array $a, Stub $stub, $isNested)
{
if (isset($a[$s = " * severity"], self::$errorTypes[$a[$s]])) {
$a[$s] = new ConstStub(self::$errorTypes[$a[$s]], $a[$s]);
}
return $a;
}
public static function castThrowingCasterException(ThrowingCasterException $e, array $a, Stub $stub, $isNested)
{
$b = (array) $a[" Exception previous"];
array_splice($b[" Exception trace"], count($a[" Exception trace"]));
$t = static::$traceArgs;
static::$traceArgs = false;
$b = static::castException($a[" Exception previous"], $b, $stub, $isNested);
static::$traceArgs = $t;
if (empty($a[" * message"])) {
$a[" * message"] = "Unexpected exception thrown from a caster: ".get_class($a[" Exception previous"]);
}
if (isset($b[" * message"])) {
$a[" ~ message"] = $b[" * message"];
}
if (isset($b[" * file"])) {
$a[" ~ file"] = $b[" * file"];
}
if (isset($b[" * line"])) {
$a[" ~ line"] = $b[" * line"];
}
if (isset($b[" Exception trace"])) {
$a[" ~ trace"] = $b[" Exception trace"];
}
unset($a[" Exception trace"], $a[" Exception previous"], $a[" * code"], $a[" * file"], $a[" * line"]);
return $a;
}
public static function filterTrace(&$trace, $dumpArgs, $offset = 0)
{
if (0 > $offset || empty($trace[$offset])) {
return $trace = null;
}
$t = $trace[$offset];
if (empty($t['class']) && isset($t['function'])) {
if ('user_error' === $t['function'] || 'trigger_error' === $t['function']) {
++$offset;
}
}
if ($offset) {
array_splice($trace, 0, $offset);
}
foreach ($trace as &$t) {
$t = array(
'call' => (isset($t['class']) ? $t['class'].$t['type'] : '').$t['function'].'()',
'file' => isset($t['line']) ? "{$t['file']}:{$t['line']}" : '',
'args' => &$t['args'],
);
if (!isset($t['args']) || !$dumpArgs) {
unset($t['args']);
}
}
}
}