public static function filtered($classes = array(), $files = array(), &$stack = null)
    {
        $skip_self_trace = 0;
        if ($stack === null) {
            $stack = debug_backtrace();
        }

        $classes = array_merge((array) $classes, array(__CLASS__));
        // Note: in a php backtrace, the class refers to the target of
        // invocation, whereas the file and line indicate where the invocation
        // happened.
        // E.g.
        //     [file] => /mover/backend/test/Belt/Support/TracePrinter.php
        //     [line] => 18
        //     [function] => debug
        //     [class] => Belt\Trace
        // Here, one might expect class to be 'Belt\Trace'
        $files = array_merge((array) $files, array(__FILE__));

        $filtered_stack = array();
        foreach ($stack as $index => $item) {
            $file = Arrays::get($item, 'file', null);
            // So given the long comment above, we cheat by looking
            // at our caller's class.
            $class = Arrays::get($stack, ($index).'.class', null);
            if (
                (in_array($file, $files))
                // ||
                // ($index != 0 && in_array($class, $classes))
            ) {
                $skip_self_trace++;
                continue;
            } else {
                $filtered_stack[] = $item;
            }
        }
        return $filtered_stack;
    }
public static function filtered($classes = array(), $files = array(), &$stack = null)
    {
        $skip_self_trace = 0;
        if ($stack === null) {
            $stack = debug_backtrace();
        }

        $classes = array_merge((array) $classes, array(__CLASS__));
        // Note: in a php backtrace, the class refers to the target of
        // invocation, whereas the file and line indicate where the invocation
        // happened.
        // E.g.
        //     [file] => /mover/backend/test/Belt/Support/TracePrinter.php
        //     [line] => 18
        //     [function] => debug
        //     [class] => Belt\Trace
        // Here, one might expect class to be 'Belt\Trace'
        $files = array_merge((array) $files, array(__FILE__));

        $filtered_stack = array();
        foreach ($stack as $index => $item) {
            $file = Arrays::get($item, 'file', null);
            // So given the long comment above, we cheat by looking
            // at our caller's class.
            $class = Arrays::get($stack, ($index).'.class', null);
            if (
                (in_array($file, $files))
                // ||
                // ($index != 0 && in_array($class, $classes))
            ) {
                $skip_self_trace++;
                continue;
            } else {
                $filtered_stack[] = $item;
            }
        }
        return $filtered_stack;
    }
public static function filtered ( $ classes = array ( ) , $ files = array ( ) , & $ stack = null ) { $ skip_self_trace = 0 ; if ( $ stack === null ) { $ stack = debug_backtrace ( ) ; } $ classes = array_merge ( ( array ) $ classes , array ( __CLASS__ ) ) ; // Note: in a php backtrace, the class refers to the target of // invocation, whereas the file and line indicate where the invocation // happened. // E.g. //     [file] => /mover/backend/test/Belt/Support/TracePrinter.php //     [line] => 18 //     [function] => debug //     [class] => Belt\Trace // Here, one might expect class to be 'Belt\Trace' $ files = array_merge ( ( array ) $ files , array ( __FILE__ ) ) ; $ filtered_stack = array ( ) ; foreach ( $ stack as $ index => $ item ) { $ file = Arrays :: get ( $ item , 'file' , null ) ; // So given the long comment above, we cheat by looking // at our caller's class. $ class = Arrays :: get ( $ stack , ( $ index ) . '.class' , null ) ; if ( ( in_array ( $ file , $ files ) ) // || // ($index != 0 && in_array($class, $classes)) ) { $ skip_self_trace ++ ; continue ; } else { $ filtered_stack [ ] = $ item ; } } return $ filtered_stack ; }
Generates a stack trace while skipping internal and self calls.

@return array
Generates a stack trace while skipping internal and self calls .