Advertisement
Guest User

Untitled

a guest
Aug 31st, 2015
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.15 KB | None | 0 0
  1. <?php
  2. function flattenExceptionBacktrace(\Exception $exception) {
  3. $traceProperty = (new \ReflectionClass('Exception'))->getProperty('trace');
  4. $traceProperty->setAccessible(true);
  5.  
  6. $flatten = function(&$value, $key) {
  7. if ($value instanceof \Closure) {
  8. $closureReflection = new \ReflectionFunction($value);
  9. $value = sprintf(
  10. '(Closure at %s:%s)',
  11. $closureReflection->getFileName(),
  12. $closureReflection->getStartLine()
  13. );
  14. } elseif (is_object($value)) {
  15. $value = sprintf('object(%s)', get_class($value));
  16. } elseif (is_resource($value)) {
  17. $value = sprintf('resource(%s)', get_resource_type($value));
  18. }
  19. };
  20.  
  21. do {
  22. $trace = $traceProperty->getValue($exception);
  23. foreach($trace as &$call) {
  24. array_walk_recursive($call['args'], $flatten);
  25. }
  26. $traceProperty->setValue($exception, $trace);
  27. } while($exception = $exception->getPrevious());
  28.  
  29. $traceProperty->setAccessible(false);
  30. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement