<?php
/*
* This file is part of Chevere.
*
* (c) Rodolfo Berrios <[email protected]>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
declare(strict_types=1);
namespace Chevere\VarDump;
use Chevere\VarDump\Interfaces\FormatInterface;
use Chevere\VarDump\Interfaces\OutputInterface;
use Chevere\VarDump\Interfaces\VarDumpInterface;
use Chevere\Writer\Interfaces\WriterInterface;
use Chevere\Writer\StreamWriter;
use function Chevere\Writer\streamTemp;
final class VarDump implements VarDumpInterface
{
/**
* @var array<mixed>
*/
private array $variables = [];
private int $shift = 0;
/**
* @var array<array<string, mixed>>
*/
private array $debugBacktrace = [];
public function __construct(
private FormatInterface $format,
private OutputInterface $output
) {
}
public function withVariables(mixed ...$variables): VarDumpInterface
{
$new = clone $this;
$new->variables = $variables;
return $new;
}
public function withShift(int $shift): VarDumpInterface
{
$new = clone $this;
$new->shift = $shift;
return $new;
}
public function process(WriterInterface $writer): void
{
if ($this->variables === []) {
return;
}
$this->setDebugBacktrace();
(new VarOutput(
$writer,
$this->debugBacktrace,
$this->format,
))
->process($this->output, ...$this->variables);
}
public function export(): string
{
$temp = streamTemp();
$tempWriter = new StreamWriter($temp);
$this->process($tempWriter);
return $tempWriter->__toString();
}
public function variables(): array
{
return $this->variables;
}
public function shift(): int
{
return $this->shift;
}
/**
* @infection-ignore-all
*/
private function setDebugBacktrace(): void
{
$this->debugBacktrace = debug_backtrace();
for ($i = 0; $i <= $this->shift; $i++) {
array_shift($this->debugBacktrace);
}
}
}
|