the-kbA-team/php_backtrace

View on GitHub
src/ClassicBacktrace.php

Summary

Maintainability
A
0 mins
Test Coverage
<?php

namespace kbATeam\PhpBacktrace;

/**
 * Class ClassicBacktrace
 * @package kbATeam\PhpBacktrace
 */
class ClassicBacktrace extends Backtrace
{
    /**
     * Returns the backtrace as a printable string similar to
     * debug_print_backtrace().
     * @return string
     */
    public function __toString()
    {
        return $this->getClassicString();
    }

    /**
     * Returns the backtrace as a printable string similar to
     * debug_print_backtrace().
     * @param int    $offset
     * @param string $fileRoot
     * @return string
     */
    public static function classicString($offset = null, $fileRoot = null)
    {
        $offset = (int) static::normalizeNumber($offset);
        $offset++; //this method adds to offset
        $trace = new self($offset, $fileRoot);
        return sprintf('%s', $trace->getClassicString());
    }

    /**
     * Returns the backtrace as a printable string similar to
     * debug_print_backtrace().
     * @return string
     */
    public function getClassicString()
    {
        $result = [];
        /** @var array<mixed> $step */
        foreach ($this->backtrace as $pos => $step) {
            $result[] = sprintf(
                '#%u%s %s%s',
                $pos,
                $pos < 10 ? ' ' : '',
                $this->funcString($step),
                $this->fileAndLine($step)
            );
        }
        return implode(PHP_EOL, $result);
    }

    /**
     * @param array<mixed> $step
     * @return string
     */
    private function fileAndLine(array $step)
    {
        if (array_key_exists('file', $step)) {
            return sprintf(' called at [%s:%u]', $step['file'], $step['line']);
        }
        return '';
    }
}